Karambir Singh - 2003-06-04

"I have some db updates in main thread. Then three threads are spawned by main thread. All these child threads do some db updates. I want all these updates to be part of the same transaction so that I can commit/rollback even child thread updates in main thread. All threads are suspend/resume the transaction."

I posted this message a few months back. Tyrex doesn't support transaction associated with  multiple threads concurrently. I got time to look into tyrex source code and found a way to support this feature. Actually when Transaction is suspended all the resources associated with transaction are suspended. And same is true for resume. If it is changed so as only resources with current thread are suspended and resumed the whole thing works fine. Here is the modified code for TransactionImpl.java. suspendResources, resumeAndEnlistResources has been fixed for the purpose. enlistResource was fixed earlier beacuse it was creating a circular list and going into infinite loop sometimes. Can you guys verify it?

/**
* Redistribution and use of this software and associated documentation
* ("Software"), with or without modification, are permitted provided
* that the following conditions are met:
*
* 1. Redistributions of source code must retain copyright
*    statements and notices.  Redistributions must also contain a
*    copy of this document.
*
* 2. Redistributions in binary form must reproduce the
*    above copyright notice, this list of conditions and the
*    following disclaimer in the documentation and/or other
*    materials provided with the distribution.
*
* 3. The name "Exolab" must not be used to endorse or promote
*    products derived from this Software without prior written
*    permission of Intalio.  For written permission,
*    please contact info@exolab.org.
*
* 4. Products derived from this Software may not be called "Exolab"
*    nor may "Exolab" appear in their names without prior written
*    permission of Intalio. Exolab is a registered
*    trademark of Intalio.
*
* 5. Due credit should be given to the Exolab Project
*    (http://www.exolab.org/).
*
* THIS SOFTWARE IS PROVIDED BY INTALIO AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
* NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
* INTALIO OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Copyright 1999-2001 (C) Intalio Inc. All Rights Reserved.
*
* $Id: TransactionImpl.java,v 1.48 2002/05/07 10:27:50 mohammed Exp $
*/

package tyrex.tm.impl;

import java.rmi.RemoteException;
import javax.transaction.Transaction;
import javax.transaction.Status;
import javax.transaction.Synchronization;
import javax.transaction.RollbackException;
import javax.transaction.SystemException;
import javax.transaction.HeuristicMixedException;
import javax.transaction.HeuristicRollbackException;
import javax.transaction.xa.Xid;
import javax.transaction.xa.XAResource;
import javax.transaction.xa.XAException;
import org.omg.CosTransactions.Resource;
import org.omg.CosTransactions.HeuristicRollback;
import org.omg.CosTransactions.HeuristicMixed;
import org.omg.CosTransactions.HeuristicHazard;
import org.omg.CosTransactions.HeuristicCommit;
import org.omg.CosTransactions.Vote;
import org.omg.CosTransactions.Coordinator;
import org.omg.CosTransactions.Inactive;
import org.omg.CosTransactions.Control;
import org.omg.CosTransactions.PropagationContext;
import org.omg.CORBA.ORB;
import org.omg.CORBA.TRANSACTION_ROLLEDBACK;
import tyrex.tm.Heuristic;
import tyrex.tm.TyrexTransaction;
import tyrex.tm.XAResourceCallback;
import tyrex.tm.xid.BaseXid;
import tyrex.tm.xid.XidUtils;
import tyrex.services.Clock;
import tyrex.util.Messages;

/**
* Implements a global transaction. This transaction supports X/A
* resources (see {@link XAResource}), can be part of an OTS global
* transaction (see {@link ResourceImpl}) and can contain OTS
* subtransactions (see {@link Resource}). Tightly integrated with
* {@link TransactionManagerImpl} and {@link TransactionServer}.
* <P>
* Synchronizations are called in the reverse order in which
* they are added.
*
* @author <a href="arkin@intalio.com">Assaf Arkin</a>
* @version $Revision: 1.48 $ $Date: 2002/05/07 10:27:50 $
* @see InternalXAResourceHolder
* @see TransactionManagerImpl
* @see TransactionDomain
* @see ResourceImpl
*/
final class TransactionImpl
    implements TyrexTransaction, Status
{

    /**
     * The transaction identifier. This must be of type {@link BaseXid}.
     */
    protected final BaseXid            _xid;

    /**
     * The transaction hash code derived from the transaction identifier.
     */
    protected final int                _hashCode;

    /**
     * Holds a list of all the synchronization objects. This array is null
     * if there are no synchronization. The array size may be larger than
     * the actual number of registered synchronization, in which case all
     * empty elements are consecutive at the end of the array.
     */
    private Synchronization[]          _syncs;

    /**
     * Reference to the first enlisted resource (single linked list).
     */
    private InternalXAResourceHolder           _enlisted;

    /**
     * Reference to the first delisted resource (single linked list).
     */
    private InternalXAResourceHolder           _delisted;

    /**
     * Holds a list of all the enlisted OTS resources. This array is null
     * if there are no resources and may contain empty entries.
     */
    private Resource[]                 _resources;

    /**
     * Holds the current status of the transaction.
     */
    protected int                      _status;

    /**
     * Held during a commit/rollback process to indicate that
     * an unexpected error occured. Will throw that exception
     * if there is no other more important exception to report
     * (e.g. RollbackException).
     */
    protected SystemException          _sysError;

    /**
     * True if this transaction has been rolled back due to timeout.
     */
    private boolean                    _timedOut;

    /**
     * If this transaction is a local recreation of a remote OTS
     * transaction, this variable will reference the propagation
     * context used to recreate this transaction. If this
     * transaction was created locally, this variable is null.
     */
    private final PropagationContext   _pgContext;

    /**
     * The heuristic decision made by the transaction after a call to
     * {@link #prepare}, {@link #internalCommit}, {@link #internalRollback}.
     * Held in case the operation is repeated to return a consistent
     * heuristic decision. Defaults to read-only (i.e. no heuristic decision).
     */
    protected int                      _heuristic = Heuristic.READONLY;

    /**
     * If this transaction is used through the OTS API, it will have
     * a control associated with it. The control is created when
     * needed and referenced from here. Most of the time, this
     * variable is null.
     */
    private ControlImpl                _control;

    /**
     * The domain to which this transaction belongs. The domain is notified
     * of the outcome of the transaction and any request to commit/rollback
     * the transaction.
     */
    protected final TransactionDomainImpl  _txDomain;

    /**
     * If this transaction is a subtransaction of some global
     * transaction, this variable will reference the parent transaction.
     * Subtransactions cannot commit or rollback directly, only as
     * nested subtransactions.
     */
    protected final TransactionImpl    _parent;

    /**
     * True if performing two-phase commit on the transaction. If this
     * flag is set, we have recorded the heuristic decision in the recovery
     * log and must complete by recording the transaction outcome and
     * forgeting about it.
     */
    private boolean                    _twoPhase;

   
    /**
     * Indicates when the transaction will timeout as system clock.
     */
    protected long                     _timeout;

    /**
     * Indicates when the transaction started as system clock.
     */
    protected final long               _started;

    /**
     * The next entry in the hashtable maintained by {@link TransactionDomain}.
     */
    protected TransactionImpl          _nextEntry;

    /**
     * Hidden constructor used by {@link TransactionDomain} to create
     * a new transaction. A transaction can only be created through
     * {@link TransactionDomain} or {@link TransactionManager} which
     * take care of several necessary housekeeping duties.
     *
     * @param xid The Xid for this transaction
     * @param parent The parent of this transaction if this is a
     * nested transaction, null if this is a top level transaction
     * @param txDomain The transaction domain
     * @param timeout The timeout for this transaction, in milliseconds
     */
    TransactionImpl( BaseXid xid, TransactionImpl parent,
                     TransactionDomainImpl txDomain, long timeout )
    {
        if ( xid == null )
            throw new IllegalArgumentException( "Argument xid is null" );
        if ( txDomain == null )
            throw new IllegalArgumentException( "Argument txDomain is null" );

        _xid = xid;
        _hashCode = xid.hashCode();
        _txDomain = txDomain;
        _pgContext = null;
        _parent = parent;
        _status = STATUS_ACTIVE;
        _started = Clock.clock();
        _timeout = _started + timeout;

        // If this transaction is a subtransaction we register it
        // as a resource in the parent transaction.
        if ( parent != null ) {
            try {
                parent.registerResource( new ResourceImpl( this ) );
            } catch ( IllegalStateException except ) {
                // The parent is being or has committed/rolledback,
                // so we did not register as a resource. Generally
                // this should not happen, but even if it does,
                // nothing breaks.
            }
        }
    }
   
   
    /**
     * Hidden constructor used by {@link TransactionDomain} to create
     * a new transaction. A transaction can only be created through
     * {@link TransactionDomain} or {@link TransactionManager} which
     * take care of several necessary housekeeping duties. This
     * transaction is created to import an OTS transaction using
     * the propagation context.
     *
     * @param xid The Xid for this transaction
     * @param pgContext The propagation context
     * @throws Inactive The parent transaction has rolled  back or
     * is inactive
     * @param txDomain The transaction domain
     * @param timeout The timeout for this transaction, in milliseconds
     */
    TransactionImpl( BaseXid xid, PropagationContext pgContext,
                     TransactionDomainImpl txDomain, long timeout )
        throws Inactive
    {
        ResourceImpl res;
   
        if ( xid == null )
            throw new IllegalArgumentException( "Argument xid is null" );
        if ( txDomain == null )
            throw new IllegalArgumentException( "Argument txDomain is null" );
        if ( pgContext == null )
            throw new IllegalArgumentException( "Argument pgContext is null" );

        _xid = xid;
        _hashCode = xid.hashCode();
        _txDomain = txDomain;
        _pgContext = pgContext;
        _parent = null;
        _status = STATUS_ACTIVE;
        _started = Clock.clock();
        _timeout = _started + timeout;
       
        // If this transaction is a local copy of a remote
        // transaction, we register it as a resource with the
        // remote transaction.
        try {
            res = new ResourceImpl( this );
            if ( _txDomain._orb != null )
                _txDomain._orb.connect( res );
            _pgContext.current.coord.register_resource( res );
        } catch ( RuntimeException except ) {
            // Anything that the remote transaction throws us
            // is considered an illegal state.
            throw new Inactive();
        } catch ( Inactive except ) {
            throw except;
        }
        _control = new ControlImpl( this, _pgContext );
    }

    /**
     * Hidden constructor used by {@link TransactionDomain} to recreate
     * a transaction during recovery. The transaction state and heuristic
     * decision are restored from information available in the recovery log.
     *
     * @param xid The Xid for this transaction
     * @param heuristic The recorded heuristic decision
     * @param txDomain The transaction domain
     */
    TransactionImpl( BaseXid xid, int heuristic, TransactionDomainImpl txDomain )
    {
        if ( xid == null )
            throw new IllegalArgumentException( "Argument xid is null" );
        if ( txDomain == null )
            throw new IllegalArgumentException( "Argument txDomain is null" );
        _xid = xid;
        _hashCode = xid.hashCode();
        _txDomain = txDomain;
        _pgContext = null;
        _parent = null;
        _started = 0;
        _timeout = 0;

        // Determine the heuristic decision, status and system error for the transaction.
        switch ( heuristic ) {
        case XAResource.XA_OK:
        case XAResource.XA_RDONLY:
            // XA_OK/XA_RDONLY indicates transaction has been prepared
            // and is read to commit. We will need to make the transaction
            // active in order to reach a new heuristic decision again.
            _heuristic = Heuristic.COMMIT;
            _status = Status.STATUS_PREPARED;
            break;
        case XAException.XA_HEURCOM:
            // XA_HEURCOM indicates the transaction has committed.
            _heuristic = Heuristic.COMMIT;
            _status = Status.STATUS_COMMITTED;
            break;
        case XAException.XA_HEURRB:
            // XA_HEURRB indicates the transaction has rolledback.
            _heuristic = Heuristic.ROLLBACK;
            _status = Status.STATUS_ROLLEDBACK;
            break;
        case XAException.XA_HEURMIX:
            // XA_HEURMIX indicates mixed heuristic, we assume rollback.
            _heuristic = Heuristic.MIXED;
            _status = Status.STATUS_ROLLEDBACK;
            break;
        case XAException.XA_HEURHAZ:
            // XA_HEURHAZ indicates hazard heuristic, we assume rollback.
            _heuristic = Heuristic.HAZARD;
            _status = Status.STATUS_ROLLEDBACK;
            break;
        case XAException.XA_RBTIMEOUT:
            // XA_RBTIMEOUT indicates transaction rolled due to timeout.
            _heuristic = Heuristic.TIMEOUT;
            _status = Status.STATUS_ROLLEDBACK;
            break;
        default:
            // Any other XA_RB* value indicates transaction has rolled
            // back due to some error. We keep the error code handy.
            if ( heuristic >= XAException.XA_RBBASE && heuristic <= XAException.XA_RBEND )
                _heuristic = Heuristic.ROLLBACK;
            else
                _heuristic = Heuristic.OTHER;
            _sysError = new SystemException( Util.getHeuristic( heuristic ) );
            _status = Status.STATUS_ROLLEDBACK;
            break;
        }

        // This transaction is recovered, we must set the two-phase
        // commit flag as true in order to record the outcome of
        // the recovery in the tranaction journal.
        _twoPhase = true;
    }

    public String toString()
    {
        return _xid.toString();
    }

    public int hashCode()
    {
        return _hashCode;
    }

    public boolean equals( Object other )
    {
        // By design choice there will only be one transaction object
        // per unique transaction (identifier).
        return ( this == other );
    }

    //-------------------------------------------------------------------------
    // Methods defined in JTA Transaction
    //-------------------------------------------------------------------------

    public int getStatus()
    {
        // Easiest method to write!
        return _status;
    }

   
    public synchronized void registerSynchronization( Synchronization sync )
        throws RollbackException, IllegalStateException, SystemException
    {
        Synchronization[] syncs;
        int               length;

        if ( sync == null )
            throw new IllegalArgumentException( "Argument sync is null" );

        // Proper notification for transactions that timed out.
        if ( _timedOut )
            throw new RollbackException( Messages.message( "tyrex.tx.timedOut" ) );
       
        // Check the status of the transaction and act accordingly.
        switch ( _status ) {
        case STATUS_ACTIVE:
            // Transaction is active, we can register the synchronization.
            break;
        case STATUS_MARKED_ROLLBACK:
            // Transaction marked for rollback, we cannot possibly register..
            throw new RollbackException( Messages.message( "tyrex.tx.markedRollback" ) );
        case STATUS_PREPARED:
        case STATUS_PREPARING:
        case STATUS_COMMITTING:
            // Transaction is preparing, cannotr register.
            throw new IllegalStateException( Messages.message( "tyrex.tx.inCommit" ) );
        case STATUS_ROLLEDBACK:
        case STATUS_ROLLING_BACK:
        case STATUS_COMMITTED:
        case STATUS_NO_TRANSACTION:
        case STATUS_UNKNOWN:
        default:
            throw new IllegalStateException( Messages.message( "tyrex.tx.inactive" ) );
        }

        if ( _syncs == null ) {
            _syncs = new Synchronization[ 2 ];
            _syncs[ 0 ] = sync;
        } else {
            // In many cases we will get duplicity in synchronization
            // registration, but we don't want to fire duplicate events.
            syncs = _syncs;
            length = syncs.length;
            for ( int i = 0 ; i < length ; ++i ) {
                if ( syncs[ i ] == sync )
                    return;
                else if ( syncs[ i ] == null ) {
                    syncs[ i ] = sync;
                    return;
                }
            }
            syncs = new Synchronization[ length * 2 ];
            for ( int i = length ; i-- > 0 ; )
                syncs[ i ] = _syncs[ i ];
            syncs[ length ] = sync;
            _syncs = syncs;
        }
    }

    public void commit() // removed synchronized for locking between different thread
        throws  RollbackException, HeuristicMixedException, HeuristicRollbackException,
                SecurityException, SystemException
    {
        if ( _status == STATUS_MARKED_ROLLBACK ) {
            // Status was changed to rollback or an error occured,
            // either case we have a heuristic decision to rollback.
            try {
                rollback();
            } catch ( Exception except ) { }
            throw new RollbackException( Messages.message( "tyrex.tx.rolledback" ) );
        }
        if ( _status == STATUS_ROLLEDBACK || _status == STATUS_ROLLING_BACK )
            throw new RollbackException( Messages.message( "tyrex.tx.rolledback" ) );
        // If this is a subtransaction, it cannot commit directly,
        // only once the parent transaction commits through the
        // {@link #internalCommit} call. We simply do nothing after
        // preperation. The heuristic decision will be remembered.
        if ( _parent != null || _pgContext != null )
            return;
        commit( canUseOnePhaseCommit() );
    }

    public synchronized void rollback()
        throws IllegalStateException, SystemException
    {      
        // Perform the rollback, pass IllegalStateException to
        // the caller, ignore the returned heuristics.
        try {
            internalRollback();
        } finally {
            _txDomain.notifyRollback( this );
            // The transaction will now tell all it's resources to
            // forget about the transaction and will release all
            // held resources. Also notifies all the synchronization
            // objects that the transaction has completed with a status.
            try {
                forget( Heuristic.ROLLBACK );
            } catch ( IllegalStateException except ) {
                // This should never happen
                _txDomain._category.error( "Internal error", except );
            }
        }
       
        // If this transaction is nested inside a parent transaction,
        // then we have just rolledback a section in the larger transaction,
        // but the larger transaction may still complete. We dissociate
        // this sub-transaction from it's parent.
        if ( _parent != null )
            _parent.unregisterResource( new ResourceImpl( this ) );
       
        // If a system error occured during this stage, report it.
        if ( _sysError != null )
            throw _sysError;
    }

    public boolean enlistResource( XAResource xaResource )
        throws IllegalStateException, SystemException, RollbackException
    {
        return enlistResource( xaResource, null );
    }

    synchronized boolean enlistResource( XAResource xaResource, XAResourceCallback callback )
        throws IllegalStateException, SystemException, RollbackException
    {
System.out.println(Thread.currentThread().getName() + "inside enlistResource");
        if(xaResource == null)
            throw new IllegalArgumentException("Argument xaResource is null");
        if(_timedOut)
            throw new RollbackException(Messages.message("tyrex.tx.timedOut"));
        switch(_status)
        {
        case 1: // '\001'
            throw new RollbackException(Messages.message("tyrex.tx.markedRollback"));

        case 2: // '\002'
        case 7: // '\007'
        case 8: // '\b'
            throw new IllegalStateException(Messages.message("tyrex.tx.inCommit"));

        case 3: // '\003'
        case 4: // '\004'
        case 5: // '\005'
        case 6: // '\006'
        case 9: // '\t'
        default:
            throw new IllegalStateException(Messages.message("tyrex.tx.inactive"));

        case 0: // '\0'
            break;
        }
        if(_enlisted != null)
        {
System.out.println(Thread.currentThread().getName() + "inside enlistResource _enlisted != null");
           InternalXAResourceHolder internalxaresourceholder = _enlisted;
            InternalXAResourceHolder internalxaresourceholder1 = null;
            for(; internalxaresourceholder != null; internalxaresourceholder = internalxaresourceholder._nextHolder)
            {
                if(internalxaresourceholder._xaResource == xaResource)
                    if(internalxaresourceholder._endFlag == 0x2000000)
                        try
                        {
                             System.out.println(Thread.currentThread().getName() + "inside enlistResource 0x2000000");

                            xaResource.start(internalxaresourceholder._xid, 0x8000000);
                            internalxaresourceholder._endFlag = 0;
                            return true;
                        }
                        catch(XAException xaexception)
                        {
                            xaexception.printStackTrace();
                            throw new NestedSystemException(xaexception);
                        }
                        catch(Exception exception)
                        {
                            exception.printStackTrace();
                            throw new NestedSystemException(exception);
                        }
                    else
                        return false;
                internalxaresourceholder1 = internalxaresourceholder;
            }

            internalxaresourceholder = _delisted;
            InternalXAResourceHolder internalxaresourceholder2 = null;
            for(; internalxaresourceholder != null; internalxaresourceholder = internalxaresourceholder._nextHolder)
            {
                if(internalxaresourceholder._xaResource == xaResource)
                    if(internalxaresourceholder._endFlag == 0x4000000)
                        try
                        {
                              System.out.println(Thread.currentThread().getName() + "inside enlistResource 0x4000000");
                           xaResource.start(internalxaresourceholder._xid, 0x200000);
                            internalxaresourceholder._endFlag = 0;
                            if(null == internalxaresourceholder1)
                            {
                                _delisted = internalxaresourceholder._nextHolder;
                                _enlisted = internalxaresourceholder;
                            } else
                            {
                                if(internalxaresourceholder2 == null)
                                    _delisted = _delisted._nextHolder;
                                else
                                    internalxaresourceholder2._nextHolder = internalxaresourceholder._nextHolder;
                                if(null == internalxaresourceholder1)
                                {
                                    _enlisted = internalxaresourceholder;
                                    internalxaresourceholder._nextHolder = null;
                                } else
                                {
                                    internalxaresourceholder._nextHolder = _enlisted;
                                    _enlisted = internalxaresourceholder;
                                }
                            }
                            return true;
                        }
                        catch(Exception exception1)
                        {
                            exception1.printStackTrace();
                            throw new NestedSystemException(exception1);
                        }
                    else
                        return false;
                internalxaresourceholder2 = internalxaresourceholder;
            }

        }
          System.out.println(Thread.currentThread().getName() + "inside enlistResource addNewResource");
       return addNewResource(xaResource, callback);
    }

    public synchronized boolean delistResource( XAResource xaResource, int flag )
        throws IllegalStateException, SystemException
    {
        InternalXAResourceHolder resHolder;
        InternalXAResourceHolder lastHolder;
   
        if ( xaResource == null )
            throw new IllegalArgumentException( "Argument xaResource is null" );

        // Check the status of the transaction and act accordingly.
        switch ( _status ) {
        case STATUS_ACTIVE:
        case STATUS_MARKED_ROLLBACK:
            // Transaction is active, we can delist the resource.
            break;
        case STATUS_PREPARED:
        case STATUS_PREPARING:
        case STATUS_COMMITTING:
            // Transaction is preparing, cannot delist resource.
            throw new IllegalStateException( Messages.message( "tyrex.tx.inCommit" ) );
        case STATUS_ROLLEDBACK:
        case STATUS_ROLLING_BACK:
        case STATUS_COMMITTED:
        case STATUS_NO_TRANSACTION:
        case STATUS_UNKNOWN:
        default:
            throw new IllegalStateException( Messages.message( "tyrex.tx.inactive" ) );
        }
       
        // Look up the enlisted resource. If the resource is not
        // enlisted, return false.
        resHolder = _enlisted;
        lastHolder = null;
        while( resHolder != null ) {
            if ( resHolder._xaResource == xaResource )
                break;
            lastHolder = resHolder;
            resHolder = resHolder._nextHolder;
        }
        if ( resHolder == null )
            return false;

        switch ( flag ) {
        case XAResource.TMSUSPEND:
            // If the resource is being suspended, we simply suspend
            // it and return. The resource will be resumed when we
            // commit/rollback, i.e. it's not removed from the
            // list of enlisted resources.
            try {
                xaResource.end( resHolder._xid, XAResource.TMSUSPEND );
                resHolder._endFlag = XAResource.TMSUSPEND;
                return true;
            } catch ( XAException except ) {
                return false;
            } catch ( Exception except ) {
                throw new NestedSystemException( except );
            }

        case XAResource.TMSUCCESS:
        case XAResource.TMFAIL:
            // If we got the fail flag, the resource has failed (e.g.
            // the JDBC connection died), we simply end the resource
            // with a failure and remove it from the list. We will
            // never need to commit or rollback this resource.
           
            // If we got the success flag then end the resource with a
            // success, remove it from the enlisted list and add it to
            // the delisted list
           
            try {
                if ( lastHolder == null )
                    _enlisted = resHolder._nextHolder;
                else
                    lastHolder._nextHolder = resHolder._nextHolder;
               
                if ( flag == XAResource.TMFAIL ) {
                    xaResource.end( resHolder._xid, XAResource.TMFAIL );

                    if ( null != resHolder._callback ) {
                        resHolder._callback.fail( resHolder._xid );   
                    }
                }
                else {
                    xaResource.end( resHolder._xid, XAResource.TMSUCCESS );
                    resHolder._nextHolder = _delisted;
                    _delisted = resHolder;
                }
                resHolder._endFlag = flag;
                return true;
            } catch ( XAException except ) {
                return false;
            } catch ( Exception except ) {
                throw new NestedSystemException( except );
            } finally {
                // if this is resource failure set rollback
                if ( flag == XAResource.TMFAIL )
                    setRollbackOnly();   
            }
        default:
            throw new IllegalArgumentException( Messages.message( "tyrex.tx.invalidFlag" ) );
        }
   }
   

    public synchronized void setRollbackOnly()
        throws IllegalStateException, SystemException
    {
        // Check the status of the transaction and act accordingly.
        switch ( _status ) {
        case STATUS_ACTIVE:
        case STATUS_MARKED_ROLLBACK:
            // Transaction is active, we'll mark it for roll back.
            _status = STATUS_MARKED_ROLLBACK;
            break;
        case STATUS_PREPARED:
        case STATUS_PREPARING:
        case STATUS_COMMITTING:
            // Transaction is right now in the process of being commited,
            // cannot change it to roll back.
            throw new IllegalStateException( Messages.message( "tyrex.tx.inCommit" ) );
        case STATUS_ROLLEDBACK:
        case STATUS_ROLLING_BACK:
            // Transaction has been or is being rolled back, just leave.
            return;
        case STATUS_COMMITTED:
        case STATUS_NO_TRANSACTION:
        case STATUS_UNKNOWN:
        default:
            throw new IllegalStateException( Messages.message( "tyrex.tx.inactive" ) );
        }
    }

    /**
     * Change the timeout for the transaction's resources
     * to the new value.
     *
     * @param seconds The new timeout in seconds
     * @see TransactionDomain#setTransactionTimeout
     */
    public void setTransactionTimeout( int seconds )
    {
        // The call to the transaction domain eventually calls
        // internalSetTransactionTimeout, but also updates the
        // next timeout for the background thread.
        _txDomain.setTransactionTimeout( this, seconds );
    }

    //-------------------------------------------------------------------------
    // Extended methods supported by TyrexTransaction
    //-------------------------------------------------------------------------

    public synchronized void asyncCommit()
        throws SystemException, SecurityException, RollbackException
    {
        Thread thread;
       
        // Dissociated the tranaction from the current thread,
        // before embarking on asynchronous commit.
        suspendTransaction();
        if ( _status == STATUS_MARKED_ROLLBACK ) {
            // Status was changed to rollback or an error occured,
            // either case we have a heuristic decision to rollback.
            _heuristic = Heuristic.ROLLBACK;
            throw new RollbackException( Messages.message( "tyrex.tx.rolledback" ) );
        }
   
        thread = new Thread( new Runnable() {
                public void run()
                {
                    boolean exceptionOccurred = false;
                   
                    synchronized ( TransactionImpl.this ) {
                        try {
                            TransactionImpl.this.commit();
                        } catch( Exception e ) {
                            exceptionOccurred = true;
                        }
                    }
                }
            } );
        // enlist the thread
        // _txDomain.enlistThread( this, ThreadContext.getThreadContext( thread ), thread );
        // start the thread
        thread.start();
    }

    public synchronized void asyncRollback()
        throws IllegalStateException, SystemException, SecurityException
    {
        Thread thread;
       
        // Dissociated the tranaction from the current thread,
        // before embarking on asynchronous commit.
        suspendTransaction();
       
        // If a system error occured during this stage, report it.
        if ( null != _sysError )
            throw _sysError;
       
        thread = new Thread( new Runnable() {
                public void run()
                {
                    boolean exceptionOccurred = false;
                   
                    synchronized ( TransactionImpl.this ) {
                        try {
                            TransactionImpl.this.rollback();
                        } catch( Exception e ) {
                            exceptionOccurred = true;
                        }
                    }
                }
            } );
        // enlist the thread
        _txDomain.enlistThread( this, ThreadContext.getThreadContext( thread ), thread );
        // start the thread
        thread.start();
    }
   

    public  boolean canUseOnePhaseCommit()
    {
        // if there are more than one resource then no one phase
        if ( ( null != _resources ) && ( 1 < _resources.length ) )
            return false;   
       
        // if there are no _enlisted and _delisted then yes
        if ( ( null == _enlisted ) && ( null == _delisted ) )
            return true;
       
        // if there are a mix of xa resources and resources then  no
        if ( ( null != _resources ) &&
             ( ( null != _enlisted ) || ( null != _delisted ) ) )
            return false;
       
        // if there is only one enlisted resource then yes
        if ( ( null != _enlisted ) &&
             ( _enlisted._nextHolder != null ) &&
             ( null == _delisted ) )
            return true;   
       
        // if there is only one delisted resource then yes
        if ( ( null != _delisted ) &&
             ( _delisted._nextHolder != null ) &&
             ( null == _enlisted ) )
            return true;   
       
        // if the same resource manager is used for all the xa
        // resources then yes
        if ( null != _enlisted ) {
            if ( ! areXaResourcesShared( _enlisted, false ) )
                return false;
            if ( null != _delisted )
                return areXaResourcesShared( _delisted, true );   
            return true;
        }
       
        if ( null != _delisted )
            return areXaResourcesShared( _delisted, false );   
       
        return true;
    }

    public synchronized void onePhaseCommit()
        throws RollbackException, HeuristicMixedException,
               HeuristicRollbackException, SecurityException,
               IllegalStateException, SystemException
    {               
        Thread          thread;
        ThreadContext   context;
       
        thread = Thread.currentThread();
        context = ThreadContext.getThreadContext( thread );
       
        if ( _status == STATUS_MARKED_ROLLBACK ) {
            // Status was changed to rollback or an error occured,
            // either case we have a heuristic decision to rollback.
            try {
                rollback();
            } catch ( Exception except ) { }
            throw new RollbackException( Messages.message( "tyrex.tx.rolledback" ) );
        }
        if ( _status == STATUS_ROLLEDBACK || _status == STATUS_ROLLING_BACK )
            throw new RollbackException( Messages.message( "tyrex.tx.rolledback" ) );
        // If this is a subtransaction, it cannot commit directly,
        // only once the parent transaction commits through the
        // {@link #internalCommit} call. We simply do nothing after
        // preperation. The heuristic decision will be remembered.
        if ( _parent != null || _pgContext != null )
            return;
              
        commit( true );
      
        _txDomain.delistThread( context, thread );
    }

    public Transaction getParent()
    {
        return _parent;
    }

    public Transaction getTopLevel()    {        if ( _parent == null )            return this;        else        _parent.getTopLevel();}

klzzwxh:10017klzzwxh:10018klzzwxh:10019 public long getTimeoutklzzwxh:10012klzzwxh:10013klzzwxh:10033klzzwxh:10020klzzwxh:10021klzzwxh:10022 klzzwxh:10014klzzwxh:10034klzzwxh:10023klzzwxh:10024klzzwxh:10025klzzwxh:10026klzzwxh:10027klzzwxh:10028klzzwxh:10029 return klzzwxh:10015timeout;klzzwxh:10035klzzwxh:10030klzzwxh:10031klzzwxh:10032 klzzwxh:10016

klzzwxh:10041klzzwxh:10042klzzwxh:10043 public long getStartedklzzwxh:10036klzzwxh:10037klzzwxh:10057klzzwxh:10044klzzwxh:10045klzzwxh:10046 klzzwxh:10038klzzwxh:10058klzzwxh:10047klzzwxh:10048klzzwxh:10049klzzwxh:10050klzzwxh:10051klzzwxh:10052klzzwxh:10053 return klzzwxh:10039started;klzzwxh:10059klzzwxh:10054klzzwxh:10055klzzwxh:10056 klzzwxh:10040

klzzwxh:10065klzzwxh:10066klzzwxh:10067 public Xid getXidklzzwxh:10060klzzwxh:10061klzzwxh:10081klzzwxh:10068klzzwxh:10069klzzwxh:10070 klzzwxh:10062klzzwxh:10082klzzwxh:10071klzzwxh:10072klzzwxh:10073klzzwxh:10074klzzwxh:10075klzzwxh:10076klzzwxh:10077 return klzzwxh:10063xid;klzzwxh:10083klzzwxh:10078klzzwxh:10079klzzwxh:10080 klzzwxh:10064

klzzwxh:10107klzzwxh:10108klzzwxh:10109 public synchronized Control getControlklzzwxh:10084klzzwxh:10085klzzwxh:10174klzzwxh:10110klzzwxh:10111klzzwxh:10112 klzzwxh:10086klzzwxh:10175klzzwxh:10113klzzwxh:10114klzzwxh:10115klzzwxh:10116klzzwxh:10117klzzwxh:10118klzzwxh:10119 if klzzwxh:10087 klzzwxh:10088control == null klzzwxh:10089 klzzwxh:10090klzzwxh:10176klzzwxh:10120klzzwxh:10121klzzwxh:10122klzzwxh:10123klzzwxh:10124klzzwxh:10125klzzwxh:10126klzzwxh:10127klzzwxh:10128klzzwxh:10129klzzwxh:10130 klzzwxh:10091control = new ControlImplklzzwxh:10092 this klzzwxh:10093;klzzwxh:10177klzzwxh:10131klzzwxh:10132klzzwxh:10133klzzwxh:10134klzzwxh:10135klzzwxh:10136klzzwxh:10137klzzwxh:10138klzzwxh:10139klzzwxh:10140klzzwxh:10141 if klzzwxh:10094 klzzwxh:10095txDomain.klzzwxh:10096orb klzzwxh:10097= null klzzwxh:10098klzzwxh:10178klzzwxh:10142klzzwxh:10143klzzwxh:10144klzzwxh:10145klzzwxh:10146klzzwxh:10147klzzwxh:10148klzzwxh:10149klzzwxh:10150klzzwxh:10151klzzwxh:10152klzzwxh:10153klzzwxh:10154klzzwxh:10155klzzwxh:10156 klzzwxh:10099txDomain.klzzwxh:10100orb.connectklzzwxh:10101 klzzwxh:10102control klzzwxh:10103;klzzwxh:10179klzzwxh:10157klzzwxh:10158klzzwxh:10159klzzwxh:10160klzzwxh:10161klzzwxh:10162klzzwxh:10163 klzzwxh:10104klzzwxh:10180klzzwxh:10164klzzwxh:10165klzzwxh:10166klzzwxh:10167klzzwxh:10168klzzwxh:10169klzzwxh:10170 return klzzwxh:10105control;klzzwxh:10181klzzwxh:10171klzzwxh:10172klzzwxh:10173 klzzwxh:10106

klzzwxh:10182klzzwxh:10183klzzwxh:10184 //-------------------------------------------------------------------------klzzwxh:10191klzzwxh:10185klzzwxh:10186klzzwxh:10187 // Methods used by related classesklzzwxh:10192klzzwxh:10188klzzwxh:10189klzzwxh:10190 //-------------------------------------------------------------------------

klzzwxh:10551klzzwxh:10552klzzwxh:10553 /klzzwxh:10193klzzwxh:10194klzzwxh:14243klzzwxh:10554klzzwxh:10555klzzwxh:10556klzzwxh:10557 klzzwxh:10195 Called to prepare the resource as part of the two phase commit protocol.klzzwxh:14244klzzwxh:10558klzzwxh:10559klzzwxh:10560klzzwxh:10561 klzzwxh:10196 On entry the status must be either klzzwxh:10197@link klzzwxh:10198STATUSklzzwxh:10199ACTIVEklzzwxh:10200 or klzzwxh:10201@linkklzzwxh:14245klzzwxh:10562klzzwxh:10563klzzwxh:10564klzzwxh:10565 klzzwxh:10202 klzzwxh:10203STATUSklzzwxh:10204MARKEDklzzwxh:10205ROLLBACKklzzwxh:10206.klzzwxh:14246klzzwxh:10566klzzwxh:10567klzzwxh:10568klzzwxh:10569 klzzwxh:10207 klzzwxh:10570pklzzwxh:10571klzzwxh:14247klzzwxh:10572klzzwxh:10573klzzwxh:10574klzzwxh:10575 klzzwxh:10208 All enlisted resources are notified that the transaction has ended,klzzwxh:14248klzzwxh:10576klzzwxh:10577klzzwxh:10578klzzwxh:10579 klzzwxh:10209 and are they asked to prepare it. If a resource succeeds we will commitklzzwxh:14249klzzwxh:10580klzzwxh:10581klzzwxh:10582klzzwxh:10583 klzzwxh:10210 it klzzwxh:10211unless we decide to rollback the entire transactionklzzwxh:10212. If a resourceklzzwxh:14250klzzwxh:10584klzzwxh:10585klzzwxh:10586klzzwxh:10587 klzzwxh:10213 is read-only klzzwxh:10214or sharedklzzwxh:10215 we will mark it as read-only. If at least oneklzzwxh:14251klzzwxh:10588klzzwxh:10589klzzwxh:10590klzzwxh:10591 klzzwxh:10216 resource fails to prepare, or any other error is encountered, we stopklzzwxh:14252klzzwxh:10592klzzwxh:10593klzzwxh:10594klzzwxh:10595 klzzwxh:10217 preparation and return a heuristic decision.klzzwxh:14253klzzwxh:10596klzzwxh:10597klzzwxh:10598klzzwxh:10599 klzzwxh:10218 klzzwxh:10600pklzzwxh:10601klzzwxh:14254klzzwxh:10602klzzwxh:10603klzzwxh:10604klzzwxh:10605 klzzwxh:10219 The heuristic decision can be any of the following:klzzwxh:14255klzzwxh:10606klzzwxh:10607klzzwxh:10608klzzwxh:10609 klzzwxh:10220 klzzwxh:10610ulklzzwxh:10611klzzwxh:14256klzzwxh:10612klzzwxh:10613klzzwxh:10614klzzwxh:10615 klzzwxh:10221 klzzwxh:10616liklzzwxh:10617klzzwxh:10222@link klzzwxh:10223Heuristic.READONLYklzzwxh:10224 There were no resources for thisklzzwxh:14257klzzwxh:10618klzzwxh:10619klzzwxh:10620klzzwxh:10621 klzzwxh:10225 transaction, or all resources are read only -- there is no need toklzzwxh:14258klzzwxh:10622klzzwxh:10623klzzwxh:10624klzzwxh:10625 klzzwxh:10226 commit/rollback this transactionklzzwxh:14259klzzwxh:10626klzzwxh:10627klzzwxh:10628klzzwxh:10629 klzzwxh:10227 klzzwxh:10630liklzzwxh:10631klzzwxh:10228@link klzzwxh:10229Heuristic.COMMITklzzwxh:10230 All resources are prepared and thoseklzzwxh:14260klzzwxh:10632klzzwxh:10633klzzwxh:10634klzzwxh:10635 klzzwxh:10231 with a false klzzwxh:10232@link InternalXAResourceHolderklzzwxh:10233readOnlyklzzwxh:10234 need to be commited.klzzwxh:14261klzzwxh:10636klzzwxh:10637klzzwxh:10638klzzwxh:10639 klzzwxh:10235 klzzwxh:10640liklzzwxh:10641klzzwxh:10236@link klzzwxh:10237Heuristic.ROLLBACKklzzwxh:10238 The transaction has been marked forklzzwxh:14262klzzwxh:10642klzzwxh:10643klzzwxh:10644klzzwxh:10645 klzzwxh:10239 rollback, an error has occured or at least one resource failed toklzzwxh:14263klzzwxh:10646klzzwxh:10647klzzwxh:10648klzzwxh:10649 klzzwxh:10240 prepare and there were no resources that commitedklzzwxh:14264klzzwxh:10650klzzwxh:10651klzzwxh:10652klzzwxh:10653 klzzwxh:10241 klzzwxh:10654liklzzwxh:10655klzzwxh:10242@link klzzwxh:10243Heuristic.MIXEDklzzwxh:10244 Some resources have already commited,klzzwxh:14265klzzwxh:10656klzzwxh:10657klzzwxh:10658klzzwxh:10659 klzzwxh:10245 others have either rolledback or failed to commit, or we got anklzzwxh:14266klzzwxh:10660klzzwxh:10661klzzwxh:10662klzzwxh:10663 klzzwxh:10246 error in the process: all resources must be rolledbackklzzwxh:14267klzzwxh:10664klzzwxh:10665klzzwxh:10666klzzwxh:10667 klzzwxh:10247 klzzwxh:10668/ulklzzwxh:10669klzzwxh:14268klzzwxh:10670klzzwxh:10671klzzwxh:10672klzzwxh:10673 klzzwxh:10248klzzwxh:14269klzzwxh:10674klzzwxh:10675klzzwxh:10676klzzwxh:10677 klzzwxh:10249 @throws IllegalStateException The transaction is not active orklzzwxh:14270klzzwxh:10678klzzwxh:10679klzzwxh:10680klzzwxh:10681 klzzwxh:10250klzzwxh:10682klzzwxh:10683 is in the process of being commitedklzzwxh:14271klzzwxh:10684klzzwxh:10685klzzwxh:10686klzzwxh:10687 klzzwxh:10251/klzzwxh:14272klzzwxh:10688klzzwxh:10689klzzwxh:10690 protected void prepareklzzwxh:10252klzzwxh:10253klzzwxh:14273klzzwxh:10691klzzwxh:10692klzzwxh:10693klzzwxh:10694klzzwxh:10695klzzwxh:10696klzzwxh:10697 throws IllegalStateException, RollbackExceptionklzzwxh:14274klzzwxh:10698klzzwxh:10699klzzwxh:10700 klzzwxh:10254klzzwxh:14275klzzwxh:10701klzzwxh:10702klzzwxh:10703klzzwxh:10704klzzwxh:10705klzzwxh:10706klzzwxh:10707 InternalXAResourceHolder resHolder;klzzwxh:14276klzzwxh:10708klzzwxh:10709klzzwxh:10710klzzwxh:10711klzzwxh:10712klzzwxh:10713klzzwxh:10714 intklzzwxh:10715klzzwxh:10716klzzwxh:10717klzzwxh:10718klzzwxh:10719klzzwxh:10720klzzwxh:10721klzzwxh:10722klzzwxh:10723klzzwxh:10724klzzwxh:10725klzzwxh:10726klzzwxh:10727 committing;klzzwxh:14277klzzwxh:10728klzzwxh:10729klzzwxh:10730klzzwxh:10731klzzwxh:10732klzzwxh:10733klzzwxh:10734 Resourceklzzwxh:10735klzzwxh:10736klzzwxh:10737klzzwxh:10738klzzwxh:10739klzzwxh:10740klzzwxh:10741klzzwxh:10742 resource;klzzwxh:14278klzzwxh:10743klzzwxh:10744klzzwxh:10745klzzwxh:10746klzzwxh:10747klzzwxh:10748klzzwxh:10749 intklzzwxh:10750klzzwxh:10751klzzwxh:10752klzzwxh:10753klzzwxh:10754klzzwxh:10755klzzwxh:10756klzzwxh:10757klzzwxh:10758klzzwxh:10759klzzwxh:10760klzzwxh:10761klzzwxh:10762 decision;klzzwxh:14279klzzwxh:10763klzzwxh:10764klzzwxh:10765klzzwxh:10766klzzwxh:10767klzzwxh:10768klzzwxh:10769 klzzwxh:14280klzzwxh:10770klzzwxh:10771klzzwxh:10772klzzwxh:10773klzzwxh:10774klzzwxh:10775klzzwxh:10776 // Proper notification for transactions that timed out.klzzwxh:14281klzzwxh:10777klzzwxh:10778klzzwxh:10779klzzwxh:10780klzzwxh:10781klzzwxh:10782klzzwxh:10783 if klzzwxh:10255 klzzwxh:10256timedOut klzzwxh:10257klzzwxh:14282klzzwxh:10784klzzwxh:10785klzzwxh:10786klzzwxh:10787klzzwxh:10788klzzwxh:10789klzzwxh:10790klzzwxh:10791klzzwxh:10792klzzwxh:10793klzzwxh:10794 throw new RollbackExceptionklzzwxh:10258 Messages.messageklzzwxh:10259 klzzwxh:10795tyrex.tx.timedOutklzzwxh:10796 klzzwxh:10260 klzzwxh:10261;klzzwxh:14283klzzwxh:10797klzzwxh:10798klzzwxh:10799klzzwxh:10800klzzwxh:10801klzzwxh:10802klzzwxh:10803 klzzwxh:14284klzzwxh:10804klzzwxh:10805klzzwxh:10806klzzwxh:10807klzzwxh:10808klzzwxh:10809klzzwxh:10810 // Check the status of the transaction and act accordingly.klzzwxh:14285klzzwxh:10811klzzwxh:10812klzzwxh:10813klzzwxh:10814klzzwxh:10815klzzwxh:10816klzzwxh:10817 switch klzzwxh:10262 klzzwxh:10263status klzzwxh:10264 klzzwxh:10265klzzwxh:14286klzzwxh:10818klzzwxh:10819klzzwxh:10820klzzwxh:10821klzzwxh:10822klzzwxh:10823klzzwxh:10824 case STATUSklzzwxh:10266ACTIVE:klzzwxh:14287klzzwxh:10825klzzwxh:10826klzzwxh:10827klzzwxh:10828klzzwxh:10829klzzwxh:10830klzzwxh:10831klzzwxh:10832klzzwxh:10833klzzwxh:10834klzzwxh:10835 // Transaction is active, we'll commit it.klzzwxh:14288klzzwxh:10836klzzwxh:10837klzzwxh:10838klzzwxh:10839klzzwxh:10840klzzwxh:10841klzzwxh:10842klzzwxh:10843klzzwxh:10844klzzwxh:10845klzzwxh:10846 break;klzzwxh:14289klzzwxh:10847klzzwxh:10848klzzwxh:10849klzzwxh:10850klzzwxh:10851klzzwxh:10852klzzwxh:10853 case STATUSklzzwxh:10267PREPARED:klzzwxh:14290klzzwxh:10854klzzwxh:10855klzzwxh:10856klzzwxh:10857klzzwxh:10858klzzwxh:10859klzzwxh:10860klzzwxh:10861klzzwxh:10862klzzwxh:10863klzzwxh:10864 // If this transaction has been prepared before, we do notklzzwxh:14291klzzwxh:10865klzzwxh:10866klzzwxh:10867klzzwxh:10868klzzwxh:10869klzzwxh:10870klzzwxh:10871klzzwxh:10872klzzwxh:10873klzzwxh:10874klzzwxh:10875 // prepare it a second time. It would have been prepared if thisklzzwxh:14292klzzwxh:10876klzzwxh:10877klzzwxh:10878klzzwxh:10879klzzwxh:10880klzzwxh:10881klzzwxh:10882klzzwxh:10883klzzwxh:10884klzzwxh:10885klzzwxh:10886 // is a subtransaction that was commited directly and is nowklzzwxh:14293klzzwxh:10887klzzwxh:10888klzzwxh:10889klzzwxh:10890klzzwxh:10891klzzwxh:10892klzzwxh:10893klzzwxh:10894klzzwxh:10895klzzwxh:10896klzzwxh:10897 // being commited by the parent transaction. The heuristicklzzwxh:14294klzzwxh:10898klzzwxh:10899klzzwxh:10900klzzwxh:10901klzzwxh:10902klzzwxh:10903klzzwxh:10904klzzwxh:10905klzzwxh:10906klzzwxh:10907klzzwxh:10908 // decision is remembered from the previous preparation.klzzwxh:14295klzzwxh:10909klzzwxh:10910klzzwxh:10911klzzwxh:10912klzzwxh:10913klzzwxh:10914klzzwxh:10915klzzwxh:10916klzzwxh:10917klzzwxh:10918klzzwxh:10919 return;klzzwxh:14296klzzwxh:10920klzzwxh:10921klzzwxh:10922klzzwxh:10923klzzwxh:10924klzzwxh:10925klzzwxh:10926 case STATUSklzzwxh:10268COMMITTING:klzzwxh:14297klzzwxh:10927klzzwxh:10928klzzwxh:10929klzzwxh:10930klzzwxh:10931klzzwxh:10932klzzwxh:10933 case STATUSklzzwxh:10269PREPARING:klzzwxh:14298klzzwxh:10934klzzwxh:10935klzzwxh:10936klzzwxh:10937klzzwxh:10938klzzwxh:10939klzzwxh:10940klzzwxh:10941klzzwxh:10942klzzwxh:10943klzzwxh:10944 // Transaction is in the middle of being commited.klzzwxh:14299klzzwxh:10945klzzwxh:10946klzzwxh:10947klzzwxh:10948klzzwxh:10949klzzwxh:10950klzzwxh:10951klzzwxh:10952klzzwxh:10953klzzwxh:10954klzzwxh:10955 throw new IllegalStateExceptionklzzwxh:10270 Messages.messageklzzwxh:10271 klzzwxh:10956tyrex.tx.inCommitklzzwxh:10957 klzzwxh:10272 klzzwxh:10273;klzzwxh:14300klzzwxh:10958klzzwxh:10959klzzwxh:10960klzzwxh:10961klzzwxh:10962klzzwxh:10963klzzwxh:10964 case STATUSklzzwxh:10274MARKEDklzzwxh:10275ROLLBACK:klzzwxh:14301klzzwxh:10965klzzwxh:10966klzzwxh:10967klzzwxh:10968klzzwxh:10969klzzwxh:10970klzzwxh:10971klzzwxh:10972klzzwxh:10973klzzwxh:10974klzzwxh:10975 // Transaction has been marked for roll-back, no preparationklzzwxh:14302klzzwxh:10976klzzwxh:10977klzzwxh:10978klzzwxh:10979klzzwxh:10980klzzwxh:10981klzzwxh:10982klzzwxh:10983klzzwxh:10984klzzwxh:10985klzzwxh:10986 // necessary.klzzwxh:14303klzzwxh:10987klzzwxh:10988klzzwxh:10989klzzwxh:10990klzzwxh:10991klzzwxh:10992klzzwxh:10993klzzwxh:10994klzzwxh:10995klzzwxh:10996klzzwxh:10997 klzzwxh:10276heuristic = Heuristic.ROLLBACK;klzzwxh:14304klzzwxh:10998klzzwxh:10999klzzwxh:11000klzzwxh:11001klzzwxh:11002klzzwxh:11003klzzwxh:11004klzzwxh:11005klzzwxh:11006klzzwxh:11007klzzwxh:11008 return;klzzwxh:14305klzzwxh:11009klzzwxh:11010klzzwxh:11011klzzwxh:11012klzzwxh:11013klzzwxh:11014klzzwxh:11015 case STATUSklzzwxh:10277ROLLEDBACK:klzzwxh:14306klzzwxh:11016klzzwxh:11017klzzwxh:11018klzzwxh:11019klzzwxh:11020klzzwxh:11021klzzwxh:11022klzzwxh:11023klzzwxh:11024klzzwxh:11025klzzwxh:11026 // Transaction has been or is being rolled back.klzzwxh:14307klzzwxh:11027klzzwxh:11028klzzwxh:11029klzzwxh:11030klzzwxh:11031klzzwxh:11032klzzwxh:11033klzzwxh:11034klzzwxh:11035klzzwxh:11036klzzwxh:11037 throw new RollbackExceptionklzzwxh:10278 Messages.messageklzzwxh:10279 klzzwxh:11038tyrex.tx.rolledbackklzzwxh:11039 klzzwxh:10280 klzzwxh:10281;klzzwxh:14308klzzwxh:11040klzzwxh:11041klzzwxh:11042klzzwxh:11043klzzwxh:11044klzzwxh:11045klzzwxh:11046 case STATUSklzzwxh:10282ROLLINGklzzwxh:10283BACK:klzzwxh:14309klzzwxh:11047klzzwxh:11048klzzwxh:11049klzzwxh:11050klzzwxh:11051klzzwxh:11052klzzwxh:11053klzzwxh:11054klzzwxh:11055klzzwxh:11056klzzwxh:11057 // Transaction has been or is being rolled back.klzzwxh:14310klzzwxh:11058klzzwxh:11059klzzwxh:11060klzzwxh:11061klzzwxh:11062klzzwxh:11063klzzwxh:11064klzzwxh:11065klzzwxh:11066klzzwxh:11067klzzwxh:11068 throw new IllegalStateExceptionklzzwxh:10284 Messages.messageklzzwxh:10285 klzzwxh:11069tyrex.tx.inRollbackklzzwxh:11070 klzzwxh:10286 klzzwxh:10287;klzzwxh:14311klzzwxh:11071klzzwxh:11072klzzwxh:11073klzzwxh:11074klzzwxh:11075klzzwxh:11076klzzwxh:11077 case STATUSklzzwxh:10288COMMITTED:klzzwxh:14312klzzwxh:11078klzzwxh:11079klzzwxh:11080klzzwxh:11081klzzwxh:11082klzzwxh:11083klzzwxh:11084 case STATUSklzzwxh:10289NOklzzwxh:10290TRANSACTION:klzzwxh:14313klzzwxh:11085klzzwxh:11086klzzwxh:11087klzzwxh:11088klzzwxh:11089klzzwxh:11090klzzwxh:11091 case STATUSklzzwxh:10291UNKNOWN:klzzwxh:14314klzzwxh:11092klzzwxh:11093klzzwxh:11094klzzwxh:11095klzzwxh:11096klzzwxh:11097klzzwxh:11098 default:klzzwxh:14315klzzwxh:11099klzzwxh:11100klzzwxh:11101klzzwxh:11102klzzwxh:11103klzzwxh:11104klzzwxh:11105klzzwxh:11106klzzwxh:11107klzzwxh:11108klzzwxh:11109 throw new IllegalStateExceptionklzzwxh:10292 Messages.messageklzzwxh:10293 klzzwxh:11110tyrex.tx.inactiveklzzwxh:11111 klzzwxh:10294 klzzwxh:10295;klzzwxh:14316klzzwxh:11112klzzwxh:11113klzzwxh:11114klzzwxh:11115klzzwxh:11116klzzwxh:11117klzzwxh:11118 klzzwxh:10296klzzwxh:14317klzzwxh:11119klzzwxh:11120klzzwxh:11121 klzzwxh:14318klzzwxh:11122klzzwxh:11123klzzwxh:11124klzzwxh:11125klzzwxh:11126klzzwxh:11127klzzwxh:11128 // Call before completion on all the registered synchronizations.klzzwxh:14319klzzwxh:11129klzzwxh:11130klzzwxh:11131klzzwxh:11132klzzwxh:11133klzzwxh:11134klzzwxh:11135 // This happens before the transaction enters the PREPARED state,klzzwxh:14320klzzwxh:11136klzzwxh:11137klzzwxh:11138klzzwxh:11139klzzwxh:11140klzzwxh:11141klzzwxh:11142 // so synchronizations can enlist new XA/OTS resources. This callklzzwxh:14321klzzwxh:11143klzzwxh:11144klzzwxh:11145klzzwxh:11146klzzwxh:11147klzzwxh:11148klzzwxh:11149 // may affect the outcome of the transaction and cause it to beklzzwxh:14322klzzwxh:11150klzzwxh:11151klzzwxh:11152klzzwxh:11153klzzwxh:11154klzzwxh:11155klzzwxh:11156 // marked as rollback-only.klzzwxh:14323klzzwxh:11157klzzwxh:11158klzzwxh:11159klzzwxh:11160klzzwxh:11161klzzwxh:11162klzzwxh:11163 if klzzwxh:10297 klzzwxh:10298syncs klzzwxh:10299= null klzzwxh:10300 klzzwxh:10301klzzwxh:14324klzzwxh:11164klzzwxh:11165klzzwxh:11166klzzwxh:11167klzzwxh:11168klzzwxh:11169klzzwxh:11170klzzwxh:11171klzzwxh:11172klzzwxh:11173klzzwxh:11174 beforeCompletionklzzwxh:10302klzzwxh:10303;klzzwxh:14325klzzwxh:11175klzzwxh:11176klzzwxh:11177klzzwxh:11178klzzwxh:11179klzzwxh:11180klzzwxh:11181klzzwxh:11182klzzwxh:11183klzzwxh:11184klzzwxh:11185 if klzzwxh:10304 klzzwxh:10305status == STATUSklzzwxh:10306MARKEDklzzwxh:10307ROLLBACK klzzwxh:10308 klzzwxh:10309klzzwxh:14326klzzwxh:11186klzzwxh:11187klzzwxh:11188klzzwxh:11189klzzwxh:11190klzzwxh:11191klzzwxh:11192klzzwxh:11193klzzwxh:11194klzzwxh:11195klzzwxh:11196klzzwxh:11197klzzwxh:11198klzzwxh:11199klzzwxh:11200 klzzwxh:10310heuristic = Heuristic.ROLLBACK;klzzwxh:14327klzzwxh:11201klzzwxh:11202klzzwxh:11203klzzwxh:11204klzzwxh:11205klzzwxh:11206klzzwxh:11207klzzwxh:11208klzzwxh:11209klzzwxh:11210klzzwxh:11211klzzwxh:11212klzzwxh:11213klzzwxh:11214klzzwxh:11215 return;klzzwxh:14328klzzwxh:11216klzzwxh:11217klzzwxh:11218klzzwxh:11219klzzwxh:11220klzzwxh:11221klzzwxh:11222klzzwxh:11223klzzwxh:11224klzzwxh:11225klzzwxh:11226 klzzwxh:10311klzzwxh:14329klzzwxh:11227klzzwxh:11228klzzwxh:11229klzzwxh:11230klzzwxh:11231klzzwxh:11232klzzwxh:11233 klzzwxh:10312klzzwxh:14330klzzwxh:11234klzzwxh:11235klzzwxh:11236klzzwxh:11237klzzwxh:11238klzzwxh:11239klzzwxh:11240klzzwxh:11241 klzzwxh:14331klzzwxh:11242klzzwxh:11243klzzwxh:11244klzzwxh:11245klzzwxh:11246klzzwxh:11247klzzwxh:11248 // We begin by having no heuristics at all, but duringklzzwxh:14332klzzwxh:11249klzzwxh:11250klzzwxh:11251klzzwxh:11252klzzwxh:11253klzzwxh:11254klzzwxh:11255 // the process we might reach a conclusion to have aklzzwxh:14333klzzwxh:11256klzzwxh:11257klzzwxh:11258klzzwxh:11259klzzwxh:11260klzzwxh:11261klzzwxh:11262 // commit or rollback heuristic.klzzwxh:14334klzzwxh:11263klzzwxh:11264klzzwxh:11265klzzwxh:11266klzzwxh:11267klzzwxh:11268klzzwxh:11269 klzzwxh:10313heuristic = Heuristic.READONLY;klzzwxh:14335klzzwxh:11270klzzwxh:11271klzzwxh:11272klzzwxh:11273klzzwxh:11274klzzwxh:11275klzzwxh:11276 klzzwxh:10314status = STATUSklzzwxh:10315PREPARING;klzzwxh:14336klzzwxh:11277klzzwxh:11278klzzwxh:11279klzzwxh:11280klzzwxh:11281klzzwxh:11282klzzwxh:11283 committing = 0;klzzwxh:14337klzzwxh:11284klzzwxh:11285klzzwxh:11286 klzzwxh:14338klzzwxh:11287klzzwxh:11288klzzwxh:11289klzzwxh:11290klzzwxh:11291klzzwxh:11292klzzwxh:11293 // We deal with OTS klzzwxh:10316remote transactions and subtransactionsklzzwxh:10317klzzwxh:14339klzzwxh:11294klzzwxh:11295klzzwxh:11296klzzwxh:11297klzzwxh:11298klzzwxh:11299klzzwxh:11300 // first because we expect a higher likelyhood of failure overklzzwxh:14340klzzwxh:11301klzzwxh:11302klzzwxh:11303klzzwxh:11304klzzwxh:11305klzzwxh:11306klzzwxh:11307 // there, and we can easly recover over here.klzzwxh:14341klzzwxh:11308klzzwxh:11309klzzwxh:11310klzzwxh:11311klzzwxh:11312klzzwxh:11313klzzwxh:11314 if klzzwxh:10318 klzzwxh:10319resources klzzwxh:10320= null klzzwxh:10321 klzzwxh:10322klzzwxh:14342klzzwxh:11315klzzwxh:11316klzzwxh:11317klzzwxh:11318klzzwxh:11319klzzwxh:11320klzzwxh:11321klzzwxh:11322klzzwxh:11323klzzwxh:11324klzzwxh:11325 // We are starting with a heuristic decision that is read-only,klzzwxh:14343klzzwxh:11326klzzwxh:11327klzzwxh:11328klzzwxh:11329klzzwxh:11330klzzwxh:11331klzzwxh:11332klzzwxh:11333klzzwxh:11334klzzwxh:11335klzzwxh:11336 // and no need to commit. At the end we might reach a heuristicklzzwxh:14344klzzwxh:11337klzzwxh:11338klzzwxh:11339klzzwxh:11340klzzwxh:11341klzzwxh:11342klzzwxh:11343klzzwxh:11344klzzwxh:11345klzzwxh:11346klzzwxh:11347 // decision to rollback, or mixed/hazard, but never commit.klzzwxh:14345klzzwxh:11348klzzwxh:11349klzzwxh:11350klzzwxh:11351klzzwxh:11352klzzwxh:11353klzzwxh:11354klzzwxh:11355klzzwxh:11356klzzwxh:11357klzzwxh:11358 for klzzwxh:10323 int i = klzzwxh:10324resources.length ; i-- klzzwxh:11359 0 ; klzzwxh:10325 klzzwxh:10326klzzwxh:14346klzzwxh:11360klzzwxh:11361klzzwxh:11362klzzwxh:11363klzzwxh:11364klzzwxh:11365klzzwxh:11366klzzwxh:11367klzzwxh:11368klzzwxh:11369klzzwxh:11370klzzwxh:11371klzzwxh:11372klzzwxh:11373klzzwxh:11374 klzzwxh:14347klzzwxh:11375klzzwxh:11376klzzwxh:11377klzzwxh:11378klzzwxh:11379klzzwxh:11380klzzwxh:11381klzzwxh:11382klzzwxh:11383klzzwxh:11384klzzwxh:11385klzzwxh:11386klzzwxh:11387klzzwxh:11388klzzwxh:11389 // If at least one resource failed to prepare, we willklzzwxh:14348klzzwxh:11390klzzwxh:11391klzzwxh:11392klzzwxh:11393klzzwxh:11394klzzwxh:11395klzzwxh:11396klzzwxh:11397klzzwxh:11398klzzwxh:11399klzzwxh:11400klzzwxh:11401klzzwxh:11402klzzwxh:11403klzzwxh:11404 // not prepare the remaining resources, but rollback.klzzwxh:14349klzzwxh:11405klzzwxh:11406klzzwxh:11407klzzwxh:11408klzzwxh:11409klzzwxh:11410klzzwxh:11411klzzwxh:11412klzzwxh:11413klzzwxh:11414klzzwxh:11415klzzwxh:11416klzzwxh:11417klzzwxh:11418klzzwxh:11419 if klzzwxh:10327 klzzwxh:10328heuristic klzzwxh:10329= Heuristic.READONLY klzzwxh:11420klzzwxh:11421 klzzwxh:10330heuristic klzzwxh:10331= Heuristic.COMMIT klzzwxh:10332klzzwxh:14350klzzwxh:11422klzzwxh:11423klzzwxh:11424klzzwxh:11425klzzwxh:11426klzzwxh:11427klzzwxh:11428klzzwxh:11429klzzwxh:11430klzzwxh:11431klzzwxh:11432klzzwxh:11433klzzwxh:11434klzzwxh:11435klzzwxh:11436klzzwxh:11437klzzwxh:11438klzzwxh:11439klzzwxh:11440 break;klzzwxh:14351klzzwxh:11441klzzwxh:11442klzzwxh:11443klzzwxh:11444klzzwxh:11445klzzwxh:11446klzzwxh:11447klzzwxh:11448klzzwxh:11449klzzwxh:11450klzzwxh:11451klzzwxh:11452klzzwxh:11453klzzwxh:11454klzzwxh:11455 klzzwxh:14352klzzwxh:11456klzzwxh:11457klzzwxh:11458klzzwxh:11459klzzwxh:11460klzzwxh:11461klzzwxh:11462klzzwxh:11463klzzwxh:11464klzzwxh:11465klzzwxh:11466klzzwxh:11467klzzwxh:11468klzzwxh:11469klzzwxh:11470 resource = klzzwxh:10333resourcesklzzwxh:10334 i klzzwxh:10335;klzzwxh:14353klzzwxh:11471klzzwxh:11472klzzwxh:11473klzzwxh:11474klzzwxh:11475klzzwxh:11476klzzwxh:11477klzzwxh:11478klzzwxh:11479klzzwxh:11480klzzwxh:11481klzzwxh:11482klzzwxh:11483klzzwxh:11484klzzwxh:11485 if klzzwxh:10336 resource == null klzzwxh:10337klzzwxh:14354klzzwxh:11486klzzwxh:11487klzzwxh:11488klzzwxh:11489klzzwxh:11490klzzwxh:11491klzzwxh:11492klzzwxh:11493klzzwxh:11494klzzwxh:11495klzzwxh:11496klzzwxh:11497klzzwxh:11498klzzwxh:11499klzzwxh:11500klzzwxh:11501klzzwxh:11502klzzwxh:11503klzzwxh:11504 continue;klzzwxh:14355klzzwxh:11505klzzwxh:11506klzzwxh:11507klzzwxh:11508klzzwxh:11509klzzwxh:11510klzzwxh:11511klzzwxh:11512klzzwxh:11513klzzwxh:11514klzzwxh:11515klzzwxh:11516klzzwxh:11517klzzwxh:11518klzzwxh:11519 try klzzwxh:10338klzzwxh:14356klzzwxh:11520klzzwxh:11521klzzwxh:11522klzzwxh:11523klzzwxh:11524klzzwxh:11525klzzwxh:11526klzzwxh:11527klzzwxh:11528klzzwxh:11529klzzwxh:11530klzzwxh:11531klzzwxh:11532klzzwxh:11533klzzwxh:11534klzzwxh:11535klzzwxh:11536klzzwxh:11537klzzwxh:11538 int vote;klzzwxh:14357klzzwxh:11539klzzwxh:11540klzzwxh:11541klzzwxh:11542klzzwxh:11543klzzwxh:11544klzzwxh:11545klzzwxh:11546klzzwxh:11547klzzwxh:11548klzzwxh:11549klzzwxh:11550klzzwxh:11551klzzwxh:11552klzzwxh:11553klzzwxh:11554klzzwxh:11555klzzwxh:11556klzzwxh:11557 klzzwxh:14358klzzwxh:11558klzzwxh:11559klzzwxh:11560klzzwxh:11561klzzwxh:11562klzzwxh:11563klzzwxh:11564klzzwxh:11565klzzwxh:11566klzzwxh:11567klzzwxh:11568klzzwxh:11569klzzwxh:11570klzzwxh:11571klzzwxh:11572klzzwxh:11573klzzwxh:11574klzzwxh:11575klzzwxh:11576 vote = resource.prepareklzzwxh:10339klzzwxh:10340.valueklzzwxh:10341klzzwxh:10342;klzzwxh:14359klzzwxh:11577klzzwxh:11578klzzwxh:11579klzzwxh:11580klzzwxh:11581klzzwxh:11582klzzwxh:11583klzzwxh:11584klzzwxh:11585klzzwxh:11586klzzwxh:11587klzzwxh:11588klzzwxh:11589klzzwxh:11590klzzwxh:11591klzzwxh:11592klzzwxh:11593klzzwxh:11594klzzwxh:11595 if klzzwxh:10343 vote == Vote.klzzwxh:10344VoteReadOnly klzzwxh:10345 klzzwxh:10346klzzwxh:14360klzzwxh:11596klzzwxh:11597klzzwxh:11598klzzwxh:11599klzzwxh:11600klzzwxh:11601klzzwxh:11602klzzwxh:11603klzzwxh:11604klzzwxh:11605klzzwxh:11606klzzwxh:11607klzzwxh:11608klzzwxh:11609klzzwxh:11610klzzwxh:11611klzzwxh:11612klzzwxh:11613klzzwxh:11614klzzwxh:11615klzzwxh:11616klzzwxh:11617klzzwxh:11618 // The resource is read-only, no need to commit/klzzwxh:14361klzzwxh:11619klzzwxh:11620klzzwxh:11621klzzwxh:11622klzzwxh:11623klzzwxh:11624klzzwxh:11625klzzwxh:11626klzzwxh:11627klzzwxh:11628klzzwxh:11629klzzwxh:11630klzzwxh:11631klzzwxh:11632klzzwxh:11633klzzwxh:11634klzzwxh:11635klzzwxh:11636klzzwxh:11637klzzwxh:11638klzzwxh:11639klzzwxh:11640klzzwxh:11641 // rollback or even forget this one.klzzwxh:14362klzzwxh:11642klzzwxh:11643klzzwxh:11644klzzwxh:11645klzzwxh:11646klzzwxh:11647klzzwxh:11648klzzwxh:11649klzzwxh:11650klzzwxh:11651klzzwxh:11652klzzwxh:11653klzzwxh:11654klzzwxh:11655klzzwxh:11656klzzwxh:11657klzzwxh:11658klzzwxh:11659klzzwxh:11660klzzwxh:11661klzzwxh:11662klzzwxh:11663klzzwxh:11664 klzzwxh:10347resourcesklzzwxh:10348 i klzzwxh:10349 = null;klzzwxh:14363klzzwxh:11665klzzwxh:11666klzzwxh:11667klzzwxh:11668klzzwxh:11669klzzwxh:11670klzzwxh:11671klzzwxh:11672klzzwxh:11673klzzwxh:11674klzzwxh:11675klzzwxh:11676klzzwxh:11677klzzwxh:11678klzzwxh:11679klzzwxh:11680klzzwxh:11681klzzwxh:11682klzzwxh:11683 klzzwxh:10350 else if klzzwxh:10351 vote == Vote.klzzwxh:10352VoteCommit klzzwxh:10353 klzzwxh:10354klzzwxh:14364klzzwxh:11684klzzwxh:11685klzzwxh:11686klzzwxh:11687klzzwxh:11688klzzwxh:11689klzzwxh:11690klzzwxh:11691klzzwxh:11692klzzwxh:11693klzzwxh:11694klzzwxh:11695klzzwxh:11696klzzwxh:11697klzzwxh:11698klzzwxh:11699klzzwxh:11700klzzwxh:11701klzzwxh:11702klzzwxh:11703klzzwxh:11704klzzwxh:11705klzzwxh:11706 // If at least one resource decided to commit,klzzwxh:14365klzzwxh:11707klzzwxh:11708klzzwxh:11709klzzwxh:11710klzzwxh:11711klzzwxh:11712klzzwxh:11713klzzwxh:11714klzzwxh:11715klzzwxh:11716klzzwxh:11717klzzwxh:11718klzzwxh:11719klzzwxh:11720klzzwxh:11721klzzwxh:11722klzzwxh:11723klzzwxh:11724klzzwxh:11725klzzwxh:11726klzzwxh:11727klzzwxh:11728klzzwxh:11729 // we still have no heuristic decision, but atklzzwxh:14366klzzwxh:11730klzzwxh:11731klzzwxh:11732klzzwxh:11733klzzwxh:11734klzzwxh:11735klzzwxh:11736klzzwxh:11737klzzwxh:11738klzzwxh:11739klzzwxh:11740klzzwxh:11741klzzwxh:11742klzzwxh:11743klzzwxh:11744klzzwxh:11745klzzwxh:11746klzzwxh:11747klzzwxh:11748klzzwxh:11749klzzwxh:11750klzzwxh:11751klzzwxh:11752 // least we can commit.klzzwxh:14367klzzwxh:11753klzzwxh:11754klzzwxh:11755klzzwxh:11756klzzwxh:11757klzzwxh:11758klzzwxh:11759klzzwxh:11760klzzwxh:11761klzzwxh:11762klzzwxh:11763klzzwxh:11764klzzwxh:11765klzzwxh:11766klzzwxh:11767klzzwxh:11768klzzwxh:11769klzzwxh:11770klzzwxh:11771klzzwxh:11772klzzwxh:11773klzzwxh:11774klzzwxh:11775 ++ committing;klzzwxh:14368klzzwxh:11776klzzwxh:11777klzzwxh:11778klzzwxh:11779klzzwxh:11780klzzwxh:11781klzzwxh:11782klzzwxh:11783klzzwxh:11784klzzwxh:11785klzzwxh:11786klzzwxh:11787klzzwxh:11788klzzwxh:11789klzzwxh:11790klzzwxh:11791klzzwxh:11792klzzwxh:11793klzzwxh:11794 klzzwxh:10355 else if klzzwxh:10356 vote == Vote.klzzwxh:10357VoteRollback klzzwxh:10358 klzzwxh:10359klzzwxh:14369klzzwxh:11795klzzwxh:11796klzzwxh:11797klzzwxh:11798klzzwxh:11799klzzwxh:11800klzzwxh:11801klzzwxh:11802klzzwxh:11803klzzwxh:11804klzzwxh:11805klzzwxh:11806klzzwxh:11807klzzwxh:11808klzzwxh:11809klzzwxh:11810klzzwxh:11811klzzwxh:11812klzzwxh:11813klzzwxh:11814klzzwxh:11815klzzwxh:11816klzzwxh:11817 // Our heuristic so far can only be read-only,klzzwxh:14370klzzwxh:11818klzzwxh:11819klzzwxh:11820klzzwxh:11821klzzwxh:11822klzzwxh:11823klzzwxh:11824klzzwxh:11825klzzwxh:11826klzzwxh:11827klzzwxh:11828klzzwxh:11829klzzwxh:11830klzzwxh:11831klzzwxh:11832klzzwxh:11833klzzwxh:11834klzzwxh:11835klzzwxh:11836klzzwxh:11837klzzwxh:11838klzzwxh:11839klzzwxh:11840 // so the only decision was can make is toklzzwxh:14371klzzwxh:11841klzzwxh:11842klzzwxh:11843klzzwxh:11844klzzwxh:11845klzzwxh:11846klzzwxh:11847klzzwxh:11848klzzwxh:11849klzzwxh:11850klzzwxh:11851klzzwxh:11852klzzwxh:11853klzzwxh:11854klzzwxh:11855klzzwxh:11856klzzwxh:11857klzzwxh:11858klzzwxh:11859klzzwxh:11860klzzwxh:11861klzzwxh:11862klzzwxh:11863 // rollback. We do not need to rollback thisklzzwxh:14372klzzwxh:11864klzzwxh:11865klzzwxh:11866klzzwxh:11867klzzwxh:11868klzzwxh:11869klzzwxh:11870klzzwxh:11871klzzwxh:11872klzzwxh:11873klzzwxh:11874klzzwxh:11875klzzwxh:11876klzzwxh:11877klzzwxh:11878klzzwxh:11879klzzwxh:11880klzzwxh:11881klzzwxh:11882klzzwxh:11883klzzwxh:11884klzzwxh:11885klzzwxh:11886 // resource or forget it.klzzwxh:14373klzzwxh:11887klzzwxh:11888klzzwxh:11889klzzwxh:11890klzzwxh:11891klzzwxh:11892klzzwxh:11893klzzwxh:11894klzzwxh:11895klzzwxh:11896klzzwxh:11897klzzwxh:11898klzzwxh:11899klzzwxh:11900klzzwxh:11901klzzwxh:11902klzzwxh:11903klzzwxh:11904klzzwxh:11905klzzwxh:11906klzzwxh:11907klzzwxh:11908klzzwxh:11909 klzzwxh:10360heuristic = klzzwxh:10361heuristic | Heuristic.ROLLBACK;klzzwxh:14374klzzwxh:11910klzzwxh:11911klzzwxh:11912klzzwxh:11913klzzwxh:11914klzzwxh:11915klzzwxh:11916klzzwxh:11917klzzwxh:11918klzzwxh:11919klzzwxh:11920klzzwxh:11921klzzwxh:11922klzzwxh:11923klzzwxh:11924klzzwxh:11925klzzwxh:11926klzzwxh:11927klzzwxh:11928klzzwxh:11929klzzwxh:11930klzzwxh:11931klzzwxh:11932 klzzwxh:10362resourcesklzzwxh:10363 i klzzwxh:10364 = null;klzzwxh:14375klzzwxh:11933klzzwxh:11934klzzwxh:11935klzzwxh:11936klzzwxh:11937klzzwxh:11938klzzwxh:11939klzzwxh:11940klzzwxh:11941klzzwxh:11942klzzwxh:11943klzzwxh:11944klzzwxh:11945klzzwxh:11946klzzwxh:11947klzzwxh:11948klzzwxh:11949klzzwxh:11950klzzwxh:11951 klzzwxh:10365klzzwxh:14376klzzwxh:11952klzzwxh:11953klzzwxh:11954klzzwxh:11955klzzwxh:11956klzzwxh:11957klzzwxh:11958klzzwxh:11959klzzwxh:11960klzzwxh:11961klzzwxh:11962klzzwxh:11963klzzwxh:11964klzzwxh:11965klzzwxh:11966 klzzwxh:10366 catch klzzwxh:10367 HeuristicMixed except klzzwxh:10368 klzzwxh:10369klzzwxh:14377klzzwxh:11967klzzwxh:11968klzzwxh:11969klzzwxh:11970klzzwxh:11971klzzwxh:11972klzzwxh:11973klzzwxh:11974klzzwxh:11975klzzwxh:11976klzzwxh:11977klzzwxh:11978klzzwxh:11979klzzwxh:11980klzzwxh:11981klzzwxh:11982klzzwxh:11983klzzwxh:11984klzzwxh:11985 // Resource indicated mixed/hazard heuristic, so theklzzwxh:14378klzzwxh:11986klzzwxh:11987klzzwxh:11988klzzwxh:11989klzzwxh:11990klzzwxh:11991klzzwxh:11992klzzwxh:11993klzzwxh:11994klzzwxh:11995klzzwxh:11996klzzwxh:11997klzzwxh:11998klzzwxh:11999klzzwxh:12000klzzwxh:12001klzzwxh:12002klzzwxh:12003klzzwxh:12004 // entire transaction is mixed heuristics.klzzwxh:14379klzzwxh:12005klzzwxh:12006klzzwxh:12007klzzwxh:12008klzzwxh:12009klzzwxh:12010klzzwxh:12011klzzwxh:12012klzzwxh:12013klzzwxh:12014klzzwxh:12015klzzwxh:12016klzzwxh:12017klzzwxh:12018klzzwxh:12019klzzwxh:12020klzzwxh:12021klzzwxh:12022klzzwxh:12023 klzzwxh:10370heuristic = klzzwxh:10371heuristic | Heuristic.MIXED;klzzwxh:14380klzzwxh:12024klzzwxh:12025klzzwxh:12026klzzwxh:12027klzzwxh:12028klzzwxh:12029klzzwxh:12030klzzwxh:12031klzzwxh:12032klzzwxh:12033klzzwxh:12034klzzwxh:12035klzzwxh:12036klzzwxh:12037klzzwxh:12038 klzzwxh:10372 catch klzzwxh:10373 HeuristicHazard except klzzwxh:10374 klzzwxh:10375klzzwxh:14381klzzwxh:12039klzzwxh:12040klzzwxh:12041klzzwxh:12042klzzwxh:12043klzzwxh:12044klzzwxh:12045klzzwxh:12046klzzwxh:12047klzzwxh:12048klzzwxh:12049klzzwxh:12050klzzwxh:12051klzzwxh:12052klzzwxh:12053klzzwxh:12054klzzwxh:12055klzzwxh:12056klzzwxh:12057 klzzwxh:10376heuristic = klzzwxh:10377heuristic | Heuristic.HAZARD;klzzwxh:14382klzzwxh:12058klzzwxh:12059klzzwxh:12060klzzwxh:12061klzzwxh:12062klzzwxh:12063klzzwxh:12064klzzwxh:12065klzzwxh:12066klzzwxh:12067klzzwxh:12068klzzwxh:12069klzzwxh:12070klzzwxh:12071klzzwxh:12072 klzzwxh:10378 catch klzzwxh:10379 Exception except klzzwxh:10380 klzzwxh:10381klzzwxh:14383klzzwxh:12073klzzwxh:12074klzzwxh:12075klzzwxh:12076klzzwxh:12077klzzwxh:12078klzzwxh:12079klzzwxh:12080klzzwxh:12081klzzwxh:12082klzzwxh:12083klzzwxh:12084klzzwxh:12085klzzwxh:12086klzzwxh:12087klzzwxh:12088klzzwxh:12089klzzwxh:12090klzzwxh:12091 if klzzwxh:10382 except instanceof TRANSACTIONklzzwxh:10383ROLLEDBACK klzzwxh:10384klzzwxh:14384klzzwxh:12092klzzwxh:12093klzzwxh:12094klzzwxh:12095klzzwxh:12096klzzwxh:12097klzzwxh:12098klzzwxh:12099klzzwxh:12100klzzwxh:12101klzzwxh:12102klzzwxh:12103klzzwxh:12104klzzwxh:12105klzzwxh:12106klzzwxh:12107klzzwxh:12108klzzwxh:12109klzzwxh:12110klzzwxh:12111klzzwxh:12112klzzwxh:12113klzzwxh:12114 klzzwxh:10385heuristic = klzzwxh:10386heuristic | Heuristic.ROLLBACK;klzzwxh:14385klzzwxh:12115klzzwxh:12116klzzwxh:12117klzzwxh:12118klzzwxh:12119klzzwxh:12120klzzwxh:12121klzzwxh:12122klzzwxh:12123klzzwxh:12124klzzwxh:12125klzzwxh:12126klzzwxh:12127klzzwxh:12128klzzwxh:12129klzzwxh:12130klzzwxh:12131klzzwxh:12132klzzwxh:12133 else klzzwxh:10387klzzwxh:14386klzzwxh:12134klzzwxh:12135klzzwxh:12136klzzwxh:12137klzzwxh:12138klzzwxh:12139klzzwxh:12140klzzwxh:12141klzzwxh:12142klzzwxh:12143klzzwxh:12144klzzwxh:12145klzzwxh:12146klzzwxh:12147klzzwxh:12148klzzwxh:12149klzzwxh:12150klzzwxh:12151klzzwxh:12152klzzwxh:12153klzzwxh:12154klzzwxh:12155klzzwxh:12156 klzzwxh:10388heuristic = klzzwxh:10389heuristic | Heuristic.HAZARD;klzzwxh:14387klzzwxh:12157klzzwxh:12158klzzwxh:12159klzzwxh:12160klzzwxh:12161klzzwxh:12162klzzwxh:12163klzzwxh:12164klzzwxh:12165klzzwxh:12166klzzwxh:12167klzzwxh:12168klzzwxh:12169klzzwxh:12170klzzwxh:12171klzzwxh:12172klzzwxh:12173klzzwxh:12174klzzwxh:12175klzzwxh:12176klzzwxh:12177klzzwxh:12178klzzwxh:12179 errorklzzwxh:10390 except klzzwxh:10391;klzzwxh:14388klzzwxh:12180klzzwxh:12181klzzwxh:12182klzzwxh:12183klzzwxh:12184klzzwxh:12185klzzwxh:12186klzzwxh:12187klzzwxh:12188klzzwxh:12189klzzwxh:12190klzzwxh:12191klzzwxh:12192klzzwxh:12193klzzwxh:12194klzzwxh:12195klzzwxh:12196klzzwxh:12197klzzwxh:12198 klzzwxh:10392klzzwxh:14389klzzwxh:12199klzzwxh:12200klzzwxh:12201klzzwxh:12202klzzwxh:12203klzzwxh:12204klzzwxh:12205klzzwxh:12206klzzwxh:12207klzzwxh:12208klzzwxh:12209klzzwxh:12210klzzwxh:12211klzzwxh:12212klzzwxh:12213 klzzwxh:10393klzzwxh:14390klzzwxh:12214klzzwxh:12215klzzwxh:12216klzzwxh:12217klzzwxh:12218klzzwxh:12219klzzwxh:12220klzzwxh:12221klzzwxh:12222klzzwxh:12223klzzwxh:12224 klzzwxh:10394klzzwxh:14391klzzwxh:12225klzzwxh:12226klzzwxh:12227klzzwxh:12228klzzwxh:12229klzzwxh:12230klzzwxh:12231 klzzwxh:10395klzzwxh:14392klzzwxh:12232klzzwxh:12233klzzwxh:12234klzzwxh:12235klzzwxh:12236klzzwxh:12237klzzwxh:12238 klzzwxh:14393klzzwxh:12239klzzwxh:12240klzzwxh:12241klzzwxh:12242klzzwxh:12243klzzwxh:12244klzzwxh:12245 // If there are any resources, perform two phase commit on them.klzzwxh:14394klzzwxh:12246klzzwxh:12247klzzwxh:12248klzzwxh:12249klzzwxh:12250klzzwxh:12251klzzwxh:12252 // We always end these resources, even if we made a heuristicklzzwxh:14395klzzwxh:12253klzzwxh:12254klzzwxh:12255klzzwxh:12256klzzwxh:12257klzzwxh:12258klzzwxh:12259 // decision not to commit this transaction.klzzwxh:14396klzzwxh:12260klzzwxh:12261klzzwxh:12262klzzwxh:12263klzzwxh:12264klzzwxh:12265klzzwxh:12266 resHolder = klzzwxh:10396enlisted;klzzwxh:14397klzzwxh:12267klzzwxh:12268klzzwxh:12269klzzwxh:12270klzzwxh:12271klzzwxh:12272klzzwxh:12273 if klzzwxh:10397 resHolder klzzwxh:10398= null klzzwxh:10399 klzzwxh:10400klzzwxh:14398klzzwxh:12274klzzwxh:12275klzzwxh:12276klzzwxh:12277klzzwxh:12278klzzwxh:12279klzzwxh:12280klzzwxh:12281klzzwxh:12282klzzwxh:12283klzzwxh:12284 endEnlistedResourcesForCommitklzzwxh:10401klzzwxh:10402;klzzwxh:14399klzzwxh:12285klzzwxh:12286klzzwxh:12287klzzwxh:12288klzzwxh:12289klzzwxh:12290klzzwxh:12291klzzwxh:12292klzzwxh:12293klzzwxh:12294klzzwxh:12295 klzzwxh:14400klzzwxh:12296klzzwxh:12297klzzwxh:12298klzzwxh:12299klzzwxh:12300klzzwxh:12301klzzwxh:12302klzzwxh:12303klzzwxh:12304klzzwxh:12305klzzwxh:12306 // Prepare all the resources that we are about to commit.klzzwxh:14401klzzwxh:12307klzzwxh:12308klzzwxh:12309klzzwxh:12310klzzwxh:12311klzzwxh:12312klzzwxh:12313klzzwxh:12314klzzwxh:12315klzzwxh:12316klzzwxh:12317 // Shared resources do not need preparation, they will notklzzwxh:14402klzzwxh:12318klzzwxh:12319klzzwxh:12320klzzwxh:12321klzzwxh:12322klzzwxh:12323klzzwxh:12324klzzwxh:12325klzzwxh:12326klzzwxh:12327klzzwxh:12328 // be commited/rolledback directly. Read-only resourcesklzzwxh:14403klzzwxh:12329klzzwxh:12330klzzwxh:12331klzzwxh:12332klzzwxh:12333klzzwxh:12334klzzwxh:12335klzzwxh:12336klzzwxh:12337klzzwxh:12338klzzwxh:12339 // will not be commited/rolled back.klzzwxh:14404klzzwxh:12340klzzwxh:12341klzzwxh:12342klzzwxh:12343klzzwxh:12344klzzwxh:12345klzzwxh:12346klzzwxh:12347klzzwxh:12348klzzwxh:12349klzzwxh:12350 resHolder = klzzwxh:10403enlisted;klzzwxh:14405klzzwxh:12351klzzwxh:12352klzzwxh:12353klzzwxh:12354klzzwxh:12355klzzwxh:12356klzzwxh:12357klzzwxh:12358klzzwxh:12359klzzwxh:12360klzzwxh:12361 while klzzwxh:10404 resHolder klzzwxh:10405= null klzzwxh:10406 klzzwxh:10407klzzwxh:14406klzzwxh:12362klzzwxh:12363klzzwxh:12364klzzwxh:12365klzzwxh:12366klzzwxh:12367klzzwxh:12368klzzwxh:12369klzzwxh:12370klzzwxh:12371klzzwxh:12372klzzwxh:12373klzzwxh:12374klzzwxh:12375klzzwxh:12376 // If at least one resource failed to prepare, we willklzzwxh:14407klzzwxh:12377klzzwxh:12378klzzwxh:12379klzzwxh:12380klzzwxh:12381klzzwxh:12382klzzwxh:12383klzzwxh:12384klzzwxh:12385klzzwxh:12386klzzwxh:12387klzzwxh:12388klzzwxh:12389klzzwxh:12390klzzwxh:12391 // not prepare the remaining resources, but rollback.klzzwxh:14408klzzwxh:12392klzzwxh:12393klzzwxh:12394klzzwxh:12395klzzwxh:12396klzzwxh:12397klzzwxh:12398klzzwxh:12399klzzwxh:12400klzzwxh:12401klzzwxh:12402klzzwxh:12403klzzwxh:12404klzzwxh:12405klzzwxh:12406 if klzzwxh:10408 klzzwxh:10409heuristic klzzwxh:10410= Heuristic.READONLY klzzwxh:12407klzzwxh:12408 klzzwxh:10411heuristic klzzwxh:10412= Heuristic.COMMIT klzzwxh:10413klzzwxh:14409klzzwxh:12409klzzwxh:12410klzzwxh:12411klzzwxh:12412klzzwxh:12413klzzwxh:12414klzzwxh:12415klzzwxh:12416klzzwxh:12417klzzwxh:12418klzzwxh:12419klzzwxh:12420klzzwxh:12421klzzwxh:12422klzzwxh:12423klzzwxh:12424klzzwxh:12425klzzwxh:12426klzzwxh:12427 break;klzzwxh:14410klzzwxh:12428klzzwxh:12429klzzwxh:12430klzzwxh:12431klzzwxh:12432klzzwxh:12433klzzwxh:12434klzzwxh:12435klzzwxh:12436klzzwxh:12437klzzwxh:12438klzzwxh:12439klzzwxh:12440klzzwxh:12441klzzwxh:12442 try klzzwxh:10414klzzwxh:14411klzzwxh:12443klzzwxh:12444klzzwxh:12445klzzwxh:12446klzzwxh:12447klzzwxh:12448klzzwxh:12449klzzwxh:12450klzzwxh:12451klzzwxh:12452klzzwxh:12453klzzwxh:12454klzzwxh:12455klzzwxh:12456klzzwxh:12457klzzwxh:12458klzzwxh:12459klzzwxh:12460klzzwxh:12461 if klzzwxh:10415 klzzwxh:10416 resHolder.klzzwxh:10417shared klzzwxh:10418 klzzwxh:10419klzzwxh:14412klzzwxh:12462klzzwxh:12463klzzwxh:12464klzzwxh:12465klzzwxh:12466klzzwxh:12467klzzwxh:12468klzzwxh:12469klzzwxh:12470klzzwxh:12471klzzwxh:12472klzzwxh:12473klzzwxh:12474klzzwxh:12475klzzwxh:12476klzzwxh:12477klzzwxh:12478klzzwxh:12479klzzwxh:12480klzzwxh:12481klzzwxh:12482klzzwxh:12483klzzwxh:12484 // We do not commit/rollback a read-only resource.klzzwxh:14413klzzwxh:12485klzzwxh:12486klzzwxh:12487klzzwxh:12488klzzwxh:12489klzzwxh:12490klzzwxh:12491klzzwxh:12492klzzwxh:12493klzzwxh:12494klzzwxh:12495klzzwxh:12496klzzwxh:12497klzzwxh:12498klzzwxh:12499klzzwxh:12500klzzwxh:12501klzzwxh:12502klzzwxh:12503klzzwxh:12504klzzwxh:12505klzzwxh:12506klzzwxh:12507 // If all resources are read only, we can returnklzzwxh:14414klzzwxh:12508klzzwxh:12509klzzwxh:12510klzzwxh:12511klzzwxh:12512klzzwxh:12513klzzwxh:12514klzzwxh:12515klzzwxh:12516klzzwxh:12517klzzwxh:12518klzzwxh:12519klzzwxh:12520klzzwxh:12521klzzwxh:12522klzzwxh:12523klzzwxh:12524klzzwxh:12525klzzwxh:12526klzzwxh:12527klzzwxh:12528klzzwxh:12529klzzwxh:12530 // a read-only heuristic.klzzwxh:14415klzzwxh:12531klzzwxh:12532klzzwxh:12533klzzwxh:12534klzzwxh:12535klzzwxh:12536klzzwxh:12537klzzwxh:12538klzzwxh:12539klzzwxh:12540klzzwxh:12541klzzwxh:12542klzzwxh:12543klzzwxh:12544klzzwxh:12545klzzwxh:12546klzzwxh:12547klzzwxh:12548klzzwxh:12549klzzwxh:12550klzzwxh:12551klzzwxh:12552klzzwxh:12553 if klzzwxh:10420 resHolder.klzzwxh:10421xaResource.prepareklzzwxh:10422 resHolder.klzzwxh:10423xid klzzwxh:10424 == XAResource.XAklzzwxh:10425RDONLY klzzwxh:10426 klzzwxh:10427klzzwxh:14416klzzwxh:12554klzzwxh:12555klzzwxh:12556klzzwxh:12557klzzwxh:12558klzzwxh:12559klzzwxh:12560klzzwxh:12561klzzwxh:12562klzzwxh:12563klzzwxh:12564klzzwxh:12565klzzwxh:12566klzzwxh:12567klzzwxh:12568klzzwxh:12569klzzwxh:12570klzzwxh:12571klzzwxh:12572klzzwxh:12573klzzwxh:12574klzzwxh:12575klzzwxh:12576klzzwxh:12577klzzwxh:12578klzzwxh:12579klzzwxh:12580 resHolder.klzzwxh:10428readOnly = true;klzzwxh:14417klzzwxh:12581klzzwxh:12582klzzwxh:12583klzzwxh:12584klzzwxh:12585klzzwxh:12586klzzwxh:12587klzzwxh:12588klzzwxh:12589klzzwxh:12590klzzwxh:12591klzzwxh:12592klzzwxh:12593klzzwxh:12594klzzwxh:12595klzzwxh:12596klzzwxh:12597klzzwxh:12598klzzwxh:12599klzzwxh:12600klzzwxh:12601klzzwxh:12602klzzwxh:12603 klzzwxh:10429klzzwxh:14418klzzwxh:12604klzzwxh:12605klzzwxh:12606klzzwxh:12607klzzwxh:12608klzzwxh:12609klzzwxh:12610klzzwxh:12611klzzwxh:12612klzzwxh:12613klzzwxh:12614klzzwxh:12615klzzwxh:12616klzzwxh:12617klzzwxh:12618klzzwxh:12619klzzwxh:12620klzzwxh:12621klzzwxh:12622klzzwxh:12623klzzwxh:12624klzzwxh:12625klzzwxh:12626 else klzzwxh:10430klzzwxh:14419klzzwxh:12627klzzwxh:12628klzzwxh:12629klzzwxh:12630klzzwxh:12631klzzwxh:12632klzzwxh:12633klzzwxh:12634klzzwxh:12635klzzwxh:12636klzzwxh:12637klzzwxh:12638klzzwxh:12639klzzwxh:12640klzzwxh:12641klzzwxh:12642klzzwxh:12643klzzwxh:12644klzzwxh:12645klzzwxh:12646klzzwxh:12647klzzwxh:12648klzzwxh:12649klzzwxh:12650klzzwxh:12651klzzwxh:12652klzzwxh:12653 ++ committing;klzzwxh:14420klzzwxh:12654klzzwxh:12655klzzwxh:12656klzzwxh:12657klzzwxh:12658klzzwxh:12659klzzwxh:12660klzzwxh:12661klzzwxh:12662klzzwxh:12663klzzwxh:12664klzzwxh:12665klzzwxh:12666klzzwxh:12667klzzwxh:12668klzzwxh:12669klzzwxh:12670klzzwxh:12671klzzwxh:12672klzzwxh:12673klzzwxh:12674klzzwxh:12675klzzwxh:12676 klzzwxh:10431klzzwxh:14421klzzwxh:12677klzzwxh:12678klzzwxh:12679klzzwxh:12680klzzwxh:12681klzzwxh:12682klzzwxh:12683klzzwxh:12684klzzwxh:12685klzzwxh:12686klzzwxh:12687klzzwxh:12688klzzwxh:12689klzzwxh:12690klzzwxh:12691klzzwxh:12692klzzwxh:12693klzzwxh:12694klzzwxh:12695 klzzwxh:10432klzzwxh:14422klzzwxh:12696klzzwxh:12697klzzwxh:12698klzzwxh:12699klzzwxh:12700klzzwxh:12701klzzwxh:12702klzzwxh:12703klzzwxh:12704klzzwxh:12705klzzwxh:12706klzzwxh:12707klzzwxh:12708klzzwxh:12709klzzwxh:12710klzzwxh:12711klzzwxh:12712klzzwxh:12713klzzwxh:12714 klzzwxh:14423klzzwxh:12715klzzwxh:12716klzzwxh:12717klzzwxh:12718klzzwxh:12719klzzwxh:12720klzzwxh:12721klzzwxh:12722klzzwxh:12723klzzwxh:12724klzzwxh:12725klzzwxh:12726klzzwxh:12727klzzwxh:12728klzzwxh:12729klzzwxh:12730klzzwxh:12731klzzwxh:12732klzzwxh:12733 // Note: We will not commit read-only resources,klzzwxh:14424klzzwxh:12734klzzwxh:12735klzzwxh:12736klzzwxh:12737klzzwxh:12738klzzwxh:12739klzzwxh:12740klzzwxh:12741klzzwxh:12742klzzwxh:12743klzzwxh:12744klzzwxh:12745klzzwxh:12746klzzwxh:12747klzzwxh:12748klzzwxh:12749klzzwxh:12750klzzwxh:12751klzzwxh:12752 // but if we get a heuristic that requires rollback,klzzwxh:14425klzzwxh:12753klzzwxh:12754klzzwxh:12755klzzwxh:12756klzzwxh:12757klzzwxh:12758klzzwxh:12759klzzwxh:12760klzzwxh:12761klzzwxh:12762klzzwxh:12763klzzwxh:12764klzzwxh:12765klzzwxh:12766klzzwxh:12767klzzwxh:12768klzzwxh:12769klzzwxh:12770klzzwxh:12771 // we will rollback all resources including this one.klzzwxh:14426klzzwxh:12772klzzwxh:12773klzzwxh:12774klzzwxh:12775klzzwxh:12776klzzwxh:12777klzzwxh:12778klzzwxh:12779klzzwxh:12780klzzwxh:12781klzzwxh:12782klzzwxh:12783klzzwxh:12784klzzwxh:12785klzzwxh:12786klzzwxh:12787klzzwxh:12788klzzwxh:12789klzzwxh:12790 // An error does not change it's state to read-only,klzzwxh:14427klzzwxh:12791klzzwxh:12792klzzwxh:12793klzzwxh:12794klzzwxh:12795klzzwxh:12796klzzwxh:12797klzzwxh:12798klzzwxh:12799klzzwxh:12800klzzwxh:12801klzzwxh:12802klzzwxh:12803klzzwxh:12804klzzwxh:12805klzzwxh:12806klzzwxh:12807klzzwxh:12808klzzwxh:12809 // since we can call rollback more than once.klzzwxh:14428klzzwxh:12810klzzwxh:12811klzzwxh:12812klzzwxh:12813klzzwxh:12814klzzwxh:12815klzzwxh:12816klzzwxh:12817klzzwxh:12818klzzwxh:12819klzzwxh:12820klzzwxh:12821klzzwxh:12822klzzwxh:12823klzzwxh:12824 klzzwxh:10433 catch klzzwxh:10434 XAException except klzzwxh:10435 klzzwxh:10436klzzwxh:14429klzzwxh:12825klzzwxh:12826klzzwxh:12827klzzwxh:12828klzzwxh:12829klzzwxh:12830klzzwxh:12831klzzwxh:12832klzzwxh:12833klzzwxh:12834klzzwxh:12835klzzwxh:12836klzzwxh:12837klzzwxh:12838klzzwxh:12839klzzwxh:12840klzzwxh:12841klzzwxh:12842klzzwxh:12843 xaErrorklzzwxh:10437 resHolder, except klzzwxh:10438;klzzwxh:14430klzzwxh:12844klzzwxh:12845klzzwxh:12846klzzwxh:12847klzzwxh:12848klzzwxh:12849klzzwxh:12850klzzwxh:12851klzzwxh:12852klzzwxh:12853klzzwxh:12854klzzwxh:12855klzzwxh:12856klzzwxh:12857klzzwxh:12858 klzzwxh:10439klzzwxh:12859 catch klzzwxh:10440 Exception except klzzwxh:10441 klzzwxh:10442klzzwxh:14431klzzwxh:12860klzzwxh:12861klzzwxh:12862klzzwxh:12863klzzwxh:12864klzzwxh:12865klzzwxh:12866klzzwxh:12867klzzwxh:12868klzzwxh:12869klzzwxh:12870klzzwxh:12871klzzwxh:12872klzzwxh:12873klzzwxh:12874klzzwxh:12875klzzwxh:12876klzzwxh:12877klzzwxh:12878 // Any error will cause us to rollback the entireklzzwxh:14432klzzwxh:12879klzzwxh:12880klzzwxh:12881klzzwxh:12882klzzwxh:12883klzzwxh:12884klzzwxh:12885klzzwxh:12886klzzwxh:12887klzzwxh:12888klzzwxh:12889klzzwxh:12890klzzwxh:12891klzzwxh:12892klzzwxh:12893klzzwxh:12894klzzwxh:12895klzzwxh:12896klzzwxh:12897 // transaction or at least the remaining part of it.klzzwxh:14433klzzwxh:12898klzzwxh:12899klzzwxh:12900klzzwxh:12901klzzwxh:12902klzzwxh:12903klzzwxh:12904klzzwxh:12905klzzwxh:12906klzzwxh:12907klzzwxh:12908klzzwxh:12909klzzwxh:12910klzzwxh:12911klzzwxh:12912klzzwxh:12913klzzwxh:12914klzzwxh:12915klzzwxh:12916 klzzwxh:10443heuristic = klzzwxh:10444heuristic | Heuristic.HAZARD;klzzwxh:14434klzzwxh:12917klzzwxh:12918klzzwxh:12919klzzwxh:12920klzzwxh:12921klzzwxh:12922klzzwxh:12923klzzwxh:12924klzzwxh:12925klzzwxh:12926klzzwxh:12927klzzwxh:12928klzzwxh:12929klzzwxh:12930klzzwxh:12931klzzwxh:12932klzzwxh:12933klzzwxh:12934klzzwxh:12935 errorklzzwxh:10445 except klzzwxh:10446;klzzwxh:14435klzzwxh:12936klzzwxh:12937klzzwxh:12938klzzwxh:12939klzzwxh:12940klzzwxh:12941klzzwxh:12942klzzwxh:12943klzzwxh:12944klzzwxh:12945klzzwxh:12946klzzwxh:12947klzzwxh:12948klzzwxh:12949klzzwxh:12950 klzzwxh:10447klzzwxh:14436klzzwxh:12951klzzwxh:12952klzzwxh:12953klzzwxh:12954klzzwxh:12955klzzwxh:12956klzzwxh:12957klzzwxh:12958klzzwxh:12959klzzwxh:12960klzzwxh:12961klzzwxh:12962klzzwxh:12963klzzwxh:12964klzzwxh:12965 resHolder = resHolder.klzzwxh:10448nextHolder;klzzwxh:14437klzzwxh:12966klzzwxh:12967klzzwxh:12968klzzwxh:12969klzzwxh:12970klzzwxh:12971klzzwxh:12972klzzwxh:12973klzzwxh:12974klzzwxh:12975klzzwxh:12976 klzzwxh:10449klzzwxh:14438klzzwxh:12977klzzwxh:12978klzzwxh:12979klzzwxh:12980klzzwxh:12981klzzwxh:12982klzzwxh:12983 klzzwxh:10450klzzwxh:14439klzzwxh:12984klzzwxh:12985klzzwxh:12986klzzwxh:12987klzzwxh:12988klzzwxh:12989klzzwxh:12990 klzzwxh:14440klzzwxh:12991klzzwxh:12992klzzwxh:12993klzzwxh:12994klzzwxh:12995klzzwxh:12996klzzwxh:12997 resHolder = klzzwxh:10451delisted;klzzwxh:14441klzzwxh:12998klzzwxh:12999klzzwxh:13000klzzwxh:13001klzzwxh:13002klzzwxh:13003klzzwxh:13004 if klzzwxh:10452 resHolder klzzwxh:10453= null klzzwxh:10454 klzzwxh:10455klzzwxh:14442klzzwxh:13005klzzwxh:13006klzzwxh:13007klzzwxh:13008klzzwxh:13009klzzwxh:13010klzzwxh:13011klzzwxh:13012klzzwxh:13013klzzwxh:13014klzzwxh:13015 // Prepare all the resources that we are about to commit.klzzwxh:14443klzzwxh:13016klzzwxh:13017klzzwxh:13018klzzwxh:13019klzzwxh:13020klzzwxh:13021klzzwxh:13022klzzwxh:13023klzzwxh:13024klzzwxh:13025klzzwxh:13026 // Shared resources do not need preparation, they will notklzzwxh:14444klzzwxh:13027klzzwxh:13028klzzwxh:13029klzzwxh:13030klzzwxh:13031klzzwxh:13032klzzwxh:13033klzzwxh:13034klzzwxh:13035klzzwxh:13036klzzwxh:13037 // be commited/rolledback directly. Read-only resourcesklzzwxh:14445klzzwxh:13038klzzwxh:13039klzzwxh:13040klzzwxh:13041klzzwxh:13042klzzwxh:13043klzzwxh:13044klzzwxh:13045klzzwxh:13046klzzwxh:13047klzzwxh:13048 // will not be commited/rolled back.klzzwxh:14446klzzwxh:13049klzzwxh:13050klzzwxh:13051klzzwxh:13052klzzwxh:13053klzzwxh:13054klzzwxh:13055klzzwxh:13056klzzwxh:13057klzzwxh:13058klzzwxh:13059 while klzzwxh:10456 resHolder klzzwxh:10457= null klzzwxh:10458 klzzwxh:10459klzzwxh:14447klzzwxh:13060klzzwxh:13061klzzwxh:13062klzzwxh:13063klzzwxh:13064klzzwxh:13065klzzwxh:13066klzzwxh:13067klzzwxh:13068klzzwxh:13069klzzwxh:13070klzzwxh:13071klzzwxh:13072klzzwxh:13073klzzwxh:13074 klzzwxh:14448klzzwxh:13075klzzwxh:13076klzzwxh:13077klzzwxh:13078klzzwxh:13079klzzwxh:13080klzzwxh:13081klzzwxh:13082klzzwxh:13083klzzwxh:13084klzzwxh:13085klzzwxh:13086klzzwxh:13087klzzwxh:13088klzzwxh:13089 // If at least one resource failed to prepare, we willklzzwxh:14449klzzwxh:13090klzzwxh:13091klzzwxh:13092klzzwxh:13093klzzwxh:13094klzzwxh:13095klzzwxh:13096klzzwxh:13097klzzwxh:13098klzzwxh:13099klzzwxh:13100klzzwxh:13101klzzwxh:13102klzzwxh:13103klzzwxh:13104 // not prepare the remaining resources, but rollback.klzzwxh:14450klzzwxh:13105klzzwxh:13106klzzwxh:13107klzzwxh:13108klzzwxh:13109klzzwxh:13110klzzwxh:13111klzzwxh:13112klzzwxh:13113klzzwxh:13114klzzwxh:13115klzzwxh:13116klzzwxh:13117klzzwxh:13118klzzwxh:13119 if klzzwxh:10460 klzzwxh:10461heuristic klzzwxh:10462= Heuristic.READONLY klzzwxh:13120klzzwxh:13121 klzzwxh:10463heuristic klzzwxh:10464= Heuristic.COMMIT klzzwxh:10465klzzwxh:14451klzzwxh:13122klzzwxh:13123klzzwxh:13124klzzwxh:13125klzzwxh:13126klzzwxh:13127klzzwxh:13128klzzwxh:13129klzzwxh:13130klzzwxh:13131klzzwxh:13132klzzwxh:13133klzzwxh:13134klzzwxh:13135klzzwxh:13136klzzwxh:13137klzzwxh:13138klzzwxh:13139klzzwxh:13140 break;klzzwxh:14452klzzwxh:13141klzzwxh:13142klzzwxh:13143klzzwxh:13144klzzwxh:13145klzzwxh:13146klzzwxh:13147klzzwxh:13148klzzwxh:13149klzzwxh:13150klzzwxh:13151klzzwxh:13152klzzwxh:13153klzzwxh:13154klzzwxh:13155 klzzwxh:14453klzzwxh:13156klzzwxh:13157klzzwxh:13158klzzwxh:13159klzzwxh:13160klzzwxh:13161klzzwxh:13162klzzwxh:13163klzzwxh:13164klzzwxh:13165klzzwxh:13166klzzwxh:13167klzzwxh:13168klzzwxh:13169klzzwxh:13170 try klzzwxh:10466klzzwxh:14454klzzwxh:13171klzzwxh:13172klzzwxh:13173klzzwxh:13174klzzwxh:13175klzzwxh:13176klzzwxh:13177klzzwxh:13178klzzwxh:13179klzzwxh:13180klzzwxh:13181klzzwxh:13182klzzwxh:13183klzzwxh:13184klzzwxh:13185klzzwxh:13186klzzwxh:13187klzzwxh:13188klzzwxh:13189 if klzzwxh:10467 klzzwxh:10468 resHolder.klzzwxh:10469shared klzzwxh:10470 klzzwxh:10471klzzwxh:14455klzzwxh:13190klzzwxh:13191klzzwxh:13192klzzwxh:13193klzzwxh:13194klzzwxh:13195klzzwxh:13196klzzwxh:13197klzzwxh:13198klzzwxh:13199klzzwxh:13200klzzwxh:13201klzzwxh:13202klzzwxh:13203klzzwxh:13204klzzwxh:13205klzzwxh:13206klzzwxh:13207klzzwxh:13208klzzwxh:13209klzzwxh:13210klzzwxh:13211klzzwxh:13212 // We do not commit/rollback a read-only resource.klzzwxh:14456klzzwxh:13213klzzwxh:13214klzzwxh:13215klzzwxh:13216klzzwxh:13217klzzwxh:13218klzzwxh:13219klzzwxh:13220klzzwxh:13221klzzwxh:13222klzzwxh:13223klzzwxh:13224klzzwxh:13225klzzwxh:13226klzzwxh:13227klzzwxh:13228klzzwxh:13229klzzwxh:13230klzzwxh:13231klzzwxh:13232klzzwxh:13233klzzwxh:13234klzzwxh:13235 // If all resources are read only, we can returnklzzwxh:14457klzzwxh:13236klzzwxh:13237klzzwxh:13238klzzwxh:13239klzzwxh:13240klzzwxh:13241klzzwxh:13242klzzwxh:13243klzzwxh:13244klzzwxh:13245klzzwxh:13246klzzwxh:13247klzzwxh:13248klzzwxh:13249klzzwxh:13250klzzwxh:13251klzzwxh:13252klzzwxh:13253klzzwxh:13254klzzwxh:13255klzzwxh:13256klzzwxh:13257klzzwxh:13258 // a read-only heuristic.klzzwxh:14458klzzwxh:13259klzzwxh:13260klzzwxh:13261klzzwxh:13262klzzwxh:13263klzzwxh:13264klzzwxh:13265klzzwxh:13266klzzwxh:13267klzzwxh:13268klzzwxh:13269klzzwxh:13270klzzwxh:13271klzzwxh:13272klzzwxh:13273klzzwxh:13274klzzwxh:13275klzzwxh:13276klzzwxh:13277klzzwxh:13278klzzwxh:13279klzzwxh:13280klzzwxh:13281 if klzzwxh:10472 resHolder.klzzwxh:10473xaResource.prepareklzzwxh:10474 resHolder.klzzwxh:10475xid klzzwxh:10476 == XAResource.XAklzzwxh:10477RDONLY klzzwxh:10478 klzzwxh:10479klzzwxh:14459klzzwxh:13282klzzwxh:13283klzzwxh:13284klzzwxh:13285klzzwxh:13286klzzwxh:13287klzzwxh:13288klzzwxh:13289klzzwxh:13290klzzwxh:13291klzzwxh:13292klzzwxh:13293klzzwxh:13294klzzwxh:13295klzzwxh:13296klzzwxh:13297klzzwxh:13298klzzwxh:13299klzzwxh:13300klzzwxh:13301klzzwxh:13302klzzwxh:13303klzzwxh:13304klzzwxh:13305klzzwxh:13306klzzwxh:13307klzzwxh:13308 resHolder.klzzwxh:10480readOnly = true;klzzwxh:14460klzzwxh:13309klzzwxh:13310klzzwxh:13311klzzwxh:13312klzzwxh:13313klzzwxh:13314klzzwxh:13315klzzwxh:13316klzzwxh:13317klzzwxh:13318klzzwxh:13319klzzwxh:13320klzzwxh:13321klzzwxh:13322klzzwxh:13323klzzwxh:13324klzzwxh:13325klzzwxh:13326klzzwxh:13327klzzwxh:13328klzzwxh:13329klzzwxh:13330klzzwxh:13331 klzzwxh:10481klzzwxh:14461klzzwxh:13332klzzwxh:13333klzzwxh:13334klzzwxh:13335klzzwxh:13336klzzwxh:13337klzzwxh:13338klzzwxh:13339klzzwxh:13340klzzwxh:13341klzzwxh:13342klzzwxh:13343klzzwxh:13344klzzwxh:13345klzzwxh:13346klzzwxh:13347klzzwxh:13348klzzwxh:13349klzzwxh:13350klzzwxh:13351klzzwxh:13352klzzwxh:13353klzzwxh:13354 else klzzwxh:10482klzzwxh:14462klzzwxh:13355klzzwxh:13356klzzwxh:13357klzzwxh:13358klzzwxh:13359klzzwxh:13360klzzwxh:13361klzzwxh:13362klzzwxh:13363klzzwxh:13364klzzwxh:13365klzzwxh:13366klzzwxh:13367klzzwxh:13368klzzwxh:13369klzzwxh:13370klzzwxh:13371klzzwxh:13372klzzwxh:13373klzzwxh:13374klzzwxh:13375klzzwxh:13376klzzwxh:13377klzzwxh:13378klzzwxh:13379klzzwxh:13380klzzwxh:13381 ++ committing;klzzwxh:14463klzzwxh:13382klzzwxh:13383klzzwxh:13384klzzwxh:13385klzzwxh:13386klzzwxh:13387klzzwxh:13388klzzwxh:13389klzzwxh:13390klzzwxh:13391klzzwxh:13392klzzwxh:13393klzzwxh:13394klzzwxh:13395klzzwxh:13396klzzwxh:13397klzzwxh:13398klzzwxh:13399klzzwxh:13400klzzwxh:13401klzzwxh:13402klzzwxh:13403klzzwxh:13404 klzzwxh:10483klzzwxh:14464klzzwxh:13405klzzwxh:13406klzzwxh:13407klzzwxh:13408klzzwxh:13409klzzwxh:13410klzzwxh:13411klzzwxh:13412klzzwxh:13413klzzwxh:13414klzzwxh:13415klzzwxh:13416klzzwxh:13417klzzwxh:13418klzzwxh:13419klzzwxh:13420klzzwxh:13421klzzwxh:13422klzzwxh:13423 klzzwxh:10484klzzwxh:14465klzzwxh:13424klzzwxh:13425klzzwxh:13426klzzwxh:13427klzzwxh:13428klzzwxh:13429klzzwxh:13430klzzwxh:13431klzzwxh:13432klzzwxh:13433klzzwxh:13434klzzwxh:13435klzzwxh:13436klzzwxh:13437klzzwxh:13438klzzwxh:13439klzzwxh:13440klzzwxh:13441klzzwxh:13442 klzzwxh:14466klzzwxh:13443klzzwxh:13444klzzwxh:13445klzzwxh:13446klzzwxh:13447klzzwxh:13448klzzwxh:13449klzzwxh:13450klzzwxh:13451klzzwxh:13452klzzwxh:13453klzzwxh:13454klzzwxh:13455klzzwxh:13456klzzwxh:13457klzzwxh:13458klzzwxh:13459klzzwxh:13460klzzwxh:13461 // Note: We will not commit read-only resources,klzzwxh:14467klzzwxh:13462klzzwxh:13463klzzwxh:13464klzzwxh:13465klzzwxh:13466klzzwxh:13467klzzwxh:13468klzzwxh:13469klzzwxh:13470klzzwxh:13471klzzwxh:13472klzzwxh:13473klzzwxh:13474klzzwxh:13475klzzwxh:13476klzzwxh:13477klzzwxh:13478klzzwxh:13479klzzwxh:13480 // but if we get a heuristic that requires rollback,klzzwxh:14468klzzwxh:13481klzzwxh:13482klzzwxh:13483klzzwxh:13484klzzwxh:13485klzzwxh:13486klzzwxh:13487klzzwxh:13488klzzwxh:13489klzzwxh:13490klzzwxh:13491klzzwxh:13492klzzwxh:13493klzzwxh:13494klzzwxh:13495klzzwxh:13496klzzwxh:13497klzzwxh:13498klzzwxh:13499 // we will rollback all resources including this one.klzzwxh:14469klzzwxh:13500klzzwxh:13501klzzwxh:13502klzzwxh:13503klzzwxh:13504klzzwxh:13505klzzwxh:13506klzzwxh:13507klzzwxh:13508klzzwxh:13509klzzwxh:13510klzzwxh:13511klzzwxh:13512klzzwxh:13513klzzwxh:13514klzzwxh:13515klzzwxh:13516klzzwxh:13517klzzwxh:13518 // An error does not change it's state to read-only,klzzwxh:14470klzzwxh:13519klzzwxh:13520klzzwxh:13521klzzwxh:13522klzzwxh:13523klzzwxh:13524klzzwxh:13525klzzwxh:13526klzzwxh:13527klzzwxh:13528klzzwxh:13529klzzwxh:13530klzzwxh:13531klzzwxh:13532klzzwxh:13533klzzwxh:13534klzzwxh:13535klzzwxh:13536klzzwxh:13537 // since we can call rollback more than once.klzzwxh:14471klzzwxh:13538klzzwxh:13539klzzwxh:13540klzzwxh:13541klzzwxh:13542klzzwxh:13543klzzwxh:13544klzzwxh:13545klzzwxh:13546klzzwxh:13547klzzwxh:13548klzzwxh:13549klzzwxh:13550klzzwxh:13551klzzwxh:13552 klzzwxh:10485 catch klzzwxh:10486 XAException except klzzwxh:10487 klzzwxh:10488klzzwxh:14472klzzwxh:13553klzzwxh:13554klzzwxh:13555klzzwxh:13556klzzwxh:13557klzzwxh:13558klzzwxh:13559klzzwxh:13560klzzwxh:13561klzzwxh:13562klzzwxh:13563klzzwxh:13564klzzwxh:13565klzzwxh:13566klzzwxh:13567klzzwxh:13568klzzwxh:13569klzzwxh:13570klzzwxh:13571 xaErrorklzzwxh:10489 resHolder, except klzzwxh:10490;klzzwxh:14473klzzwxh:13572klzzwxh:13573klzzwxh:13574klzzwxh:13575klzzwxh:13576klzzwxh:13577klzzwxh:13578klzzwxh:13579klzzwxh:13580klzzwxh:13581klzzwxh:13582klzzwxh:13583klzzwxh:13584klzzwxh:13585klzzwxh:13586 klzzwxh:10491klzzwxh:13587 catch klzzwxh:10492 Exception except klzzwxh:10493 klzzwxh:10494klzzwxh:14474klzzwxh:13588klzzwxh:13589klzzwxh:13590klzzwxh:13591klzzwxh:13592klzzwxh:13593klzzwxh:13594klzzwxh:13595klzzwxh:13596klzzwxh:13597klzzwxh:13598klzzwxh:13599klzzwxh:13600klzzwxh:13601klzzwxh:13602klzzwxh:13603klzzwxh:13604klzzwxh:13605klzzwxh:13606 // Any error will cause us to rollback the entireklzzwxh:14475klzzwxh:13607klzzwxh:13608klzzwxh:13609klzzwxh:13610klzzwxh:13611klzzwxh:13612klzzwxh:13613klzzwxh:13614klzzwxh:13615klzzwxh:13616klzzwxh:13617klzzwxh:13618klzzwxh:13619klzzwxh:13620klzzwxh:13621klzzwxh:13622klzzwxh:13623klzzwxh:13624klzzwxh:13625 // transaction or at least the remaining part of it.klzzwxh:14476klzzwxh:13626klzzwxh:13627klzzwxh:13628klzzwxh:13629klzzwxh:13630klzzwxh:13631klzzwxh:13632klzzwxh:13633klzzwxh:13634klzzwxh:13635klzzwxh:13636klzzwxh:13637klzzwxh:13638klzzwxh:13639klzzwxh:13640klzzwxh:13641klzzwxh:13642klzzwxh:13643klzzwxh:13644 klzzwxh:10495heuristic = klzzwxh:10496heuristic | Heuristic.HAZARD;klzzwxh:14477klzzwxh:13645klzzwxh:13646klzzwxh:13647klzzwxh:13648klzzwxh:13649klzzwxh:13650klzzwxh:13651klzzwxh:13652klzzwxh:13653klzzwxh:13654klzzwxh:13655klzzwxh:13656klzzwxh:13657klzzwxh:13658klzzwxh:13659klzzwxh:13660klzzwxh:13661klzzwxh:13662klzzwxh:13663 errorklzzwxh:10497 except klzzwxh:10498;klzzwxh:14478klzzwxh:13664klzzwxh:13665klzzwxh:13666klzzwxh:13667klzzwxh:13668klzzwxh:13669klzzwxh:13670klzzwxh:13671klzzwxh:13672klzzwxh:13673klzzwxh:13674klzzwxh:13675klzzwxh:13676klzzwxh:13677klzzwxh:13678 klzzwxh:10499klzzwxh:14479klzzwxh:13679klzzwxh:13680klzzwxh:13681klzzwxh:13682klzzwxh:13683klzzwxh:13684klzzwxh:13685klzzwxh:13686klzzwxh:13687klzzwxh:13688klzzwxh:13689klzzwxh:13690klzzwxh:13691klzzwxh:13692klzzwxh:13693 resHolder = resHolder.klzzwxh:10500nextHolder;klzzwxh:14480klzzwxh:13694klzzwxh:13695klzzwxh:13696klzzwxh:13697klzzwxh:13698klzzwxh:13699klzzwxh:13700klzzwxh:13701klzzwxh:13702klzzwxh:13703klzzwxh:13704 klzzwxh:10501klzzwxh:14481klzzwxh:13705klzzwxh:13706klzzwxh:13707klzzwxh:13708klzzwxh:13709klzzwxh:13710klzzwxh:13711 klzzwxh:10502klzzwxh:14482klzzwxh:13712klzzwxh:13713klzzwxh:13714klzzwxh:13715klzzwxh:13716klzzwxh:13717klzzwxh:13718 klzzwxh:14483klzzwxh:13719klzzwxh:13720klzzwxh:13721klzzwxh:13722klzzwxh:13723klzzwxh:13724klzzwxh:13725 klzzwxh:10503status = STATUSklzzwxh:10504PREPARED;klzzwxh:14484klzzwxh:13726klzzwxh:13727klzzwxh:13728klzzwxh:13729klzzwxh:13730klzzwxh:13731klzzwxh:13732 klzzwxh:14485klzzwxh:13733klzzwxh:13734klzzwxh:13735klzzwxh:13736klzzwxh:13737klzzwxh:13738klzzwxh:13739 // We make a heuristic decision to commit only if we made no otherklzzwxh:14486klzzwxh:13740klzzwxh:13741klzzwxh:13742klzzwxh:13743klzzwxh:13744klzzwxh:13745klzzwxh:13746 // heuristic decision during perparation and we have at leastklzzwxh:14487klzzwxh:13747klzzwxh:13748klzzwxh:13749klzzwxh:13750klzzwxh:13751klzzwxh:13752klzzwxh:13753 // one resource interested in committing.klzzwxh:14488klzzwxh:13754klzzwxh:13755klzzwxh:13756klzzwxh:13757klzzwxh:13758klzzwxh:13759klzzwxh:13760 if klzzwxh:10505 klzzwxh:10506heuristic == Heuristic.READONLYklzzwxh:13761 klzzwxh:13762klzzwxh:13763 committing klzzwxh:13764 0 klzzwxh:10507klzzwxh:14489klzzwxh:13765klzzwxh:13766klzzwxh:13767klzzwxh:13768klzzwxh:13769klzzwxh:13770klzzwxh:13771klzzwxh:13772klzzwxh:13773klzzwxh:13774klzzwxh:13775 klzzwxh:10508heuristic = Heuristic.COMMIT;klzzwxh:14490klzzwxh:13776klzzwxh:13777klzzwxh:13778klzzwxh:13779klzzwxh:13780klzzwxh:13781klzzwxh:13782 elseklzzwxh:14491klzzwxh:13783klzzwxh:13784klzzwxh:13785klzzwxh:13786klzzwxh:13787klzzwxh:13788klzzwxh:13789klzzwxh:13790klzzwxh:13791klzzwxh:13792klzzwxh:13793 klzzwxh:10509heuristic = normalizeklzzwxh:10510 klzzwxh:10511heuristic klzzwxh:10512;klzzwxh:14492klzzwxh:13794klzzwxh:13795klzzwxh:13796klzzwxh:13797klzzwxh:13798klzzwxh:13799klzzwxh:13800 klzzwxh:14493klzzwxh:13801klzzwxh:13802klzzwxh:13803klzzwxh:13804klzzwxh:13805klzzwxh:13806klzzwxh:13807 // Must mark transaction as two-phase in order to record decisionklzzwxh:14494klzzwxh:13808klzzwxh:13809klzzwxh:13810klzzwxh:13811klzzwxh:13812klzzwxh:13813klzzwxh:13814 // in recovery log.klzzwxh:14495klzzwxh:13815klzzwxh:13816klzzwxh:13817klzzwxh:13818klzzwxh:13819klzzwxh:13820klzzwxh:13821 if klzzwxh:10513 klzzwxh:10514heuristic klzzwxh:10515= Heuristic.READONLY klzzwxh:10516 klzzwxh:10517klzzwxh:14496klzzwxh:13822klzzwxh:13823klzzwxh:13824klzzwxh:13825klzzwxh:13826klzzwxh:13827klzzwxh:13828klzzwxh:13829klzzwxh:13830klzzwxh:13831klzzwxh:13832 klzzwxh:10518twoPhase = true;klzzwxh:14497klzzwxh:13833klzzwxh:13834klzzwxh:13835klzzwxh:13836klzzwxh:13837klzzwxh:13838klzzwxh:13839klzzwxh:13840klzzwxh:13841klzzwxh:13842klzzwxh:13843 if klzzwxh:10519 klzzwxh:10520txDomain.klzzwxh:10521journal klzzwxh:10522= null klzzwxh:10523 klzzwxh:10524klzzwxh:14498klzzwxh:13844klzzwxh:13845klzzwxh:13846klzzwxh:13847klzzwxh:13848klzzwxh:13849klzzwxh:13850klzzwxh:13851klzzwxh:13852klzzwxh:13853klzzwxh:13854klzzwxh:13855klzzwxh:13856klzzwxh:13857klzzwxh:13858 switch klzzwxh:10525 klzzwxh:10526heuristic klzzwxh:10527 klzzwxh:10528klzzwxh:14499klzzwxh:13859klzzwxh:13860klzzwxh:13861klzzwxh:13862klzzwxh:13863klzzwxh:13864klzzwxh:13865klzzwxh:13866klzzwxh:13867klzzwxh:13868klzzwxh:13869klzzwxh:13870klzzwxh:13871klzzwxh:13872klzzwxh:13873 case Heuristic.COMMIT:klzzwxh:14500klzzwxh:13874klzzwxh:13875klzzwxh:13876klzzwxh:13877klzzwxh:13878klzzwxh:13879klzzwxh:13880klzzwxh:13881klzzwxh:13882klzzwxh:13883klzzwxh:13884klzzwxh:13885klzzwxh:13886klzzwxh:13887klzzwxh:13888klzzwxh:13889klzzwxh:13890klzzwxh:13891klzzwxh:13892 decision = XAException.XAklzzwxh:10529HEURCOM;klzzwxh:14501klzzwxh:13893klzzwxh:13894klzzwxh:13895klzzwxh:13896klzzwxh:13897klzzwxh:13898klzzwxh:13899klzzwxh:13900klzzwxh:13901klzzwxh:13902klzzwxh:13903klzzwxh:13904klzzwxh:13905klzzwxh:13906klzzwxh:13907klzzwxh:13908klzzwxh:13909klzzwxh:13910klzzwxh:13911 break;klzzwxh:14502klzzwxh:13912klzzwxh:13913klzzwxh:13914klzzwxh:13915klzzwxh:13916klzzwxh:13917klzzwxh:13918klzzwxh:13919klzzwxh:13920klzzwxh:13921klzzwxh:13922klzzwxh:13923klzzwxh:13924klzzwxh:13925klzzwxh:13926 case Heuristic.ROLLBACK:klzzwxh:14503klzzwxh:13927klzzwxh:13928klzzwxh:13929klzzwxh:13930klzzwxh:13931klzzwxh:13932klzzwxh:13933klzzwxh:13934klzzwxh:13935klzzwxh:13936klzzwxh:13937klzzwxh:13938klzzwxh:13939klzzwxh:13940klzzwxh:13941klzzwxh:13942klzzwxh:13943klzzwxh:13944klzzwxh:13945 decision = XAException.XAklzzwxh:10530HEURRB;klzzwxh:14504klzzwxh:13946klzzwxh:13947klzzwxh:13948klzzwxh:13949klzzwxh:13950klzzwxh:13951klzzwxh:13952klzzwxh:13953klzzwxh:13954klzzwxh:13955klzzwxh:13956klzzwxh:13957klzzwxh:13958klzzwxh:13959klzzwxh:13960klzzwxh:13961klzzwxh:13962klzzwxh:13963klzzwxh:13964 break;klzzwxh:14505klzzwxh:13965klzzwxh:13966klzzwxh:13967klzzwxh:13968klzzwxh:13969klzzwxh:13970klzzwxh:13971klzzwxh:13972klzzwxh:13973klzzwxh:13974klzzwxh:13975klzzwxh:13976klzzwxh:13977klzzwxh:13978klzzwxh:13979 case Heuristic.MIXED:klzzwxh:14506klzzwxh:13980klzzwxh:13981klzzwxh:13982klzzwxh:13983klzzwxh:13984klzzwxh:13985klzzwxh:13986klzzwxh:13987klzzwxh:13988klzzwxh:13989klzzwxh:13990klzzwxh:13991klzzwxh:13992klzzwxh:13993klzzwxh:13994klzzwxh:13995klzzwxh:13996klzzwxh:13997klzzwxh:13998 decision = XAException.XAklzzwxh:10531HEURMIX;klzzwxh:14507klzzwxh:13999klzzwxh:14000klzzwxh:14001klzzwxh:14002klzzwxh:14003klzzwxh:14004klzzwxh:14005klzzwxh:14006klzzwxh:14007klzzwxh:14008klzzwxh:14009klzzwxh:14010klzzwxh:14011klzzwxh:14012klzzwxh:14013klzzwxh:14014klzzwxh:14015klzzwxh:14016klzzwxh:14017 break;klzzwxh:14508klzzwxh:14018klzzwxh:14019klzzwxh:14020klzzwxh:14021klzzwxh:14022klzzwxh:14023klzzwxh:14024klzzwxh:14025klzzwxh:14026klzzwxh:14027klzzwxh:14028klzzwxh:14029klzzwxh:14030klzzwxh:14031klzzwxh:14032 case Heuristic.HAZARD:klzzwxh:14509klzzwxh:14033klzzwxh:14034klzzwxh:14035klzzwxh:14036klzzwxh:14037klzzwxh:14038klzzwxh:14039klzzwxh:14040klzzwxh:14041klzzwxh:14042klzzwxh:14043klzzwxh:14044klzzwxh:14045klzzwxh:14046klzzwxh:14047klzzwxh:14048klzzwxh:14049klzzwxh:14050klzzwxh:14051 decision = XAException.XAklzzwxh:10532HEURHAZ;klzzwxh:14510klzzwxh:14052klzzwxh:14053klzzwxh:14054klzzwxh:14055klzzwxh:14056klzzwxh:14057klzzwxh:14058klzzwxh:14059klzzwxh:14060klzzwxh:14061klzzwxh:14062klzzwxh:14063klzzwxh:14064klzzwxh:14065klzzwxh:14066klzzwxh:14067klzzwxh:14068klzzwxh:14069klzzwxh:14070 break;klzzwxh:14511klzzwxh:14071klzzwxh:14072klzzwxh:14073klzzwxh:14074klzzwxh:14075klzzwxh:14076klzzwxh:14077klzzwxh:14078klzzwxh:14079klzzwxh:14080klzzwxh:14081klzzwxh:14082klzzwxh:14083klzzwxh:14084klzzwxh:14085 default:klzzwxh:14512klzzwxh:14086klzzwxh:14087klzzwxh:14088klzzwxh:14089klzzwxh:14090klzzwxh:14091klzzwxh:14092klzzwxh:14093klzzwxh:14094klzzwxh:14095klzzwxh:14096klzzwxh:14097klzzwxh:14098klzzwxh:14099klzzwxh:14100klzzwxh:14101klzzwxh:14102klzzwxh:14103klzzwxh:14104 decision = XAException.XAklzzwxh:10533RBOTHER;klzzwxh:14513klzzwxh:14105klzzwxh:14106klzzwxh:14107klzzwxh:14108klzzwxh:14109klzzwxh:14110klzzwxh:14111klzzwxh:14112klzzwxh:14113klzzwxh:14114klzzwxh:14115klzzwxh:14116klzzwxh:14117klzzwxh:14118klzzwxh:14119klzzwxh:14120klzzwxh:14121klzzwxh:14122klzzwxh:14123 break;klzzwxh:14514klzzwxh:14124klzzwxh:14125klzzwxh:14126klzzwxh:14127klzzwxh:14128klzzwxh:14129klzzwxh:14130klzzwxh:14131klzzwxh:14132klzzwxh:14133klzzwxh:14134klzzwxh:14135klzzwxh:14136klzzwxh:14137klzzwxh:14138 klzzwxh:10534klzzwxh:14515klzzwxh:14139klzzwxh:14140klzzwxh:14141klzzwxh:14142klzzwxh:14143klzzwxh:14144klzzwxh:14145klzzwxh:14146klzzwxh:14147klzzwxh:14148klzzwxh:14149klzzwxh:14150klzzwxh:14151klzzwxh:14152klzzwxh:14153 try klzzwxh:10535klzzwxh:14516klzzwxh:14154klzzwxh:14155klzzwxh:14156klzzwxh:14157klzzwxh:14158klzzwxh:14159klzzwxh:14160klzzwxh:14161klzzwxh:14162klzzwxh:14163klzzwxh:14164klzzwxh:14165klzzwxh:14166klzzwxh:14167klzzwxh:14168klzzwxh:14169klzzwxh:14170klzzwxh:14171klzzwxh:14172 klzzwxh:10536txDomain.klzzwxh:10537journal.prepareklzzwxh:10538 klzzwxh:10539xid, decision klzzwxh:10540;klzzwxh:14517klzzwxh:14173klzzwxh:14174klzzwxh:14175klzzwxh:14176klzzwxh:14177klzzwxh:14178klzzwxh:14179klzzwxh:14180klzzwxh:14181klzzwxh:14182klzzwxh:14183klzzwxh:14184klzzwxh:14185klzzwxh:14186klzzwxh:14187 klzzwxh:10541 catch klzzwxh:10542 SystemException except klzzwxh:10543 klzzwxh:10544klzzwxh:14518klzzwxh:14188klzzwxh:14189klzzwxh:14190klzzwxh:14191klzzwxh:14192klzzwxh:14193klzzwxh:14194klzzwxh:14195klzzwxh:14196klzzwxh:14197klzzwxh:14198klzzwxh:14199klzzwxh:14200klzzwxh:14201klzzwxh:14202klzzwxh:14203klzzwxh:14204klzzwxh:14205klzzwxh:14206 errorklzzwxh:10545 except klzzwxh:10546;klzzwxh:14519klzzwxh:14207klzzwxh:14208klzzwxh:14209klzzwxh:14210klzzwxh:14211klzzwxh:14212klzzwxh:14213klzzwxh:14214klzzwxh:14215klzzwxh:14216klzzwxh:14217klzzwxh:14218klzzwxh:14219klzzwxh:14220klzzwxh:14221 klzzwxh:10547klzzwxh:14520klzzwxh:14222klzzwxh:14223klzzwxh:14224klzzwxh:14225klzzwxh:14226klzzwxh:14227klzzwxh:14228klzzwxh:14229klzzwxh:14230klzzwxh:14231klzzwxh:14232 klzzwxh:10548klzzwxh:14521klzzwxh:14233klzzwxh:14234klzzwxh:14235klzzwxh:14236klzzwxh:14237klzzwxh:14238klzzwxh:14239 klzzwxh:10549klzzwxh:14522klzzwxh:14240klzzwxh:14241klzzwxh:14242 klzzwxh:10550

klzzwxh:14565klzzwxh:14566klzzwxh:14567 /klzzwxh:14523klzzwxh:14524klzzwxh:14729klzzwxh:14568klzzwxh:14569klzzwxh:14570klzzwxh:14571 klzzwxh:14525 Performs the second part of the two phase commit, after a callklzzwxh:14730klzzwxh:14572klzzwxh:14573klzzwxh:14574klzzwxh:14575 klzzwxh:14526 to klzzwxh:14527@link klzzwxh:14528prepareklzzwxh:14529 returned a heuristic decision to commit.klzzwxh:14731klzzwxh:14576klzzwxh:14577klzzwxh:14578klzzwxh:14579 klzzwxh:14530 Will attempt to commit on all the resources that are not read-only.klzzwxh:14732klzzwxh:14580klzzwxh:14581klzzwxh:14582klzzwxh:14583 klzzwxh:14531 The end result is described in a heuristic decision. Multipleklzzwxh:14733klzzwxh:14584klzzwxh:14585klzzwxh:14586klzzwxh:14587 klzzwxh:14532 calls are supported.klzzwxh:14734klzzwxh:14588klzzwxh:14589klzzwxh:14590klzzwxh:14591 klzzwxh:14533 klzzwxh:14592pklzzwxh:14593klzzwxh:14735klzzwxh:14594klzzwxh:14595klzzwxh:14596klzzwxh:14597 klzzwxh:14534 The heuristic decision can be any of the following:klzzwxh:14736klzzwxh:14598klzzwxh:14599klzzwxh:14600klzzwxh:14601 klzzwxh:14535 klzzwxh:14602ulklzzwxh:14603klzzwxh:14737klzzwxh:14604klzzwxh:14605klzzwxh:14606klzzwxh:14607 klzzwxh:14536 klzzwxh:14608liklzzwxh:14609klzzwxh:14537@link klzzwxh:14538Heuristic.COMMITklzzwxh:14539 All resources were commitedklzzwxh:14738klzzwxh:14610klzzwxh:14611klzzwxh:14612klzzwxh:14613 klzzwxh:14540 successfulyklzzwxh:14739klzzwxh:14614klzzwxh:14615klzzwxh:14616klzzwxh:14617 klzzwxh:14541 klzzwxh:14618liklzzwxh:14619klzzwxh:14542@link klzzwxh:14543Heuristic.ROLLBACKklzzwxh:14544 No resources were commitedklzzwxh:14740klzzwxh:14620klzzwxh:14621klzzwxh:14622klzzwxh:14623 klzzwxh:14545 successfuly, all resources were rolledback successfulyklzzwxh:14741klzzwxh:14624klzzwxh:14625klzzwxh:14626klzzwxh:14627 klzzwxh:14546 klzzwxh:14628liklzzwxh:14629klzzwxh:14547@link klzzwxh:14548Heuristic.MIXEDklzzwxh:14549 Some resources have commited,klzzwxh:14742klzzwxh:14630klzzwxh:14631klzzwxh:14632klzzwxh:14633 klzzwxh:14550 others have rolled backklzzwxh:14743klzzwxh:14634klzzwxh:14635klzzwxh:14636klzzwxh:14637 klzzwxh:14551 klzzwxh:14638/ulklzzwxh:14639klzzwxh:14744klzzwxh:14640klzzwxh:14641klzzwxh:14642klzzwxh:14643 klzzwxh:14552klzzwxh:14745klzzwxh:14644klzzwxh:14645klzzwxh:14646klzzwxh:14647 klzzwxh:14553 @param onePhaseCommit True if one phase commit is to be usedklzzwxh:14746klzzwxh:14648klzzwxh:14649klzzwxh:14650klzzwxh:14651 klzzwxh:14554 @throws IllegalStateException Transaction has not been preparedklzzwxh:14747klzzwxh:14652klzzwxh:14653klzzwxh:14654klzzwxh:14655 klzzwxh:14555/klzzwxh:14748klzzwxh:14656klzzwxh:14657klzzwxh:14658 protected void internalCommitklzzwxh:14556 boolean onePhaseCommit klzzwxh:14557klzzwxh:14749klzzwxh:14659klzzwxh:14660klzzwxh:14661klzzwxh:14662klzzwxh:14663klzzwxh:14664klzzwxh:14665 throws IllegalStateExceptionklzzwxh:14750klzzwxh:14666klzzwxh:14667klzzwxh:14668 klzzwxh:14558klzzwxh:14751klzzwxh:14669klzzwxh:14670klzzwxh:14671klzzwxh:14672klzzwxh:14673klzzwxh:14674klzzwxh:14675 Resourceklzzwxh:14676 resource;klzzwxh:14752klzzwxh:14677klzzwxh:14678klzzwxh:14679klzzwxh:14680klzzwxh:14681klzzwxh:14682klzzwxh:14683 intklzzwxh:14684klzzwxh:14685klzzwxh:14686klzzwxh:14687klzzwxh:14688klzzwxh:14689 decision;klzzwxh:14753klzzwxh:14690klzzwxh:14691klzzwxh:14692klzzwxh:14693klzzwxh:14694klzzwxh:14695klzzwxh:14696 klzzwxh:14754klzzwxh:14697klzzwxh:14698klzzwxh:14699klzzwxh:14700klzzwxh:14701klzzwxh:14702klzzwxh:14703 // If already committed we just return. The previous heuristicklzzwxh:14755klzzwxh:14704klzzwxh:14705klzzwxh:14706klzzwxh:14707klzzwxh:14708klzzwxh:14709klzzwxh:14710 // is still remembered.klzzwxh:14756klzzwxh:14711klzzwxh:14712klzzwxh:14713klzzwxh:14714klzzwxh:14715klzzwxh:14716klzzwxh:14717 if klzzwxh:14559 klzzwxh:14560status == STATUSklzzwxh:14561COMMITTED || klzzwxh:14562status == STATUSklzzwxh:14563ROLLEDBACK klzzwxh:14564klzzwxh:14757klzzwxh:14718klzzwxh:14719klzzwxh:14720klzzwxh:14721klzzwxh:14722klzzwxh:14723klzzwxh:14724klzzwxh:14725klzzwxh:14726klzzwxh:14727klzzwxh:14728 return;

klzzwxh:14847klzzwxh:14848klzzwxh:14849klzzwxh:14850klzzwxh:14851klzzwxh:14852klzzwxh:14853 // We should never reach this state unless transaction has beenklzzwxh:15528klzzwxh:14854klzzwxh:14855klzzwxh:14856klzzwxh:14857klzzwxh:14858klzzwxh:14859klzzwxh:14860 // prepared first.klzzwxh:15529klzzwxh:14861klzzwxh:14862klzzwxh:14863klzzwxh:14864klzzwxh:14865klzzwxh:14866klzzwxh:14867 if klzzwxh:14758 klzzwxh:14759 klzzwxh:14760onePhaseCommit klzzwxh:14868klzzwxh:14869 klzzwxh:14761 klzzwxh:14762status klzzwxh:14763= STATUSklzzwxh:14764PREPARED klzzwxh:14765 klzzwxh:14766 ||klzzwxh:15530klzzwxh:14870klzzwxh:14871klzzwxh:14872klzzwxh:14873klzzwxh:14874klzzwxh:14875klzzwxh:14876klzzwxh:14877klzzwxh:14878klzzwxh:14879klzzwxh:14880klzzwxh:14881 klzzwxh:14767 onePhaseCommit klzzwxh:14882klzzwxh:14883 klzzwxh:14768 klzzwxh:14769status klzzwxh:14770= STATUSklzzwxh:14771COMMITTING klzzwxh:14772 klzzwxh:14773 klzzwxh:14774klzzwxh:15531klzzwxh:14884klzzwxh:14885klzzwxh:14886klzzwxh:14887klzzwxh:14888klzzwxh:14889klzzwxh:14890klzzwxh:14891klzzwxh:14892klzzwxh:14893klzzwxh:14894 throw new IllegalStateExceptionklzzwxh:14775 Messages.messageklzzwxh:14776 klzzwxh:14895tyrex.tx.notPreparedklzzwxh:14896 klzzwxh:14777 klzzwxh:14778;klzzwxh:15532klzzwxh:14897klzzwxh:14898klzzwxh:14899klzzwxh:14900klzzwxh:14901klzzwxh:14902klzzwxh:14903 klzzwxh:15533klzzwxh:14904klzzwxh:14905klzzwxh:14906klzzwxh:14907klzzwxh:14908klzzwxh:14909klzzwxh:14910 // 2PC: Phase two - commitklzzwxh:15534klzzwxh:14911klzzwxh:14912klzzwxh:14913klzzwxh:14914klzzwxh:14915klzzwxh:14916klzzwxh:14917 klzzwxh:15535klzzwxh:14918klzzwxh:14919klzzwxh:14920klzzwxh:14921klzzwxh:14922klzzwxh:14923klzzwxh:14924 // Transaction has been prepared fully or partially.klzzwxh:15536klzzwxh:14925klzzwxh:14926klzzwxh:14927klzzwxh:14928klzzwxh:14929klzzwxh:14930klzzwxh:14931 // If at least one resource requested roll back klzzwxh:14779orklzzwxh:15537klzzwxh:14932klzzwxh:14933klzzwxh:14934klzzwxh:14935klzzwxh:14936klzzwxh:14937klzzwxh:14938 // indicated mixed heuristicsklzzwxh:14780 we'll roll back all resources.klzzwxh:15538klzzwxh:14939klzzwxh:14940klzzwxh:14941klzzwxh:14942klzzwxh:14943klzzwxh:14944klzzwxh:14945 // We start as read-only until at least one resource indicatesklzzwxh:15539klzzwxh:14946klzzwxh:14947klzzwxh:14948klzzwxh:14949klzzwxh:14950klzzwxh:14951klzzwxh:14952 // it actually commited.klzzwxh:15540klzzwxh:14953klzzwxh:14954klzzwxh:14955klzzwxh:14956klzzwxh:14957klzzwxh:14958klzzwxh:14959 klzzwxh:14781status = STATUSklzzwxh:14782COMMITTING;klzzwxh:15541klzzwxh:14960klzzwxh:14961klzzwxh:14962klzzwxh:14963klzzwxh:14964klzzwxh:14965klzzwxh:14966 klzzwxh:14783heuristic = Heuristic.READONLY;klzzwxh:14967klzzwxh:14968klzzwxh:14969klzzwxh:14970klzzwxh:14971klzzwxh:14972klzzwxh:14973klzzwxh:14974klzzwxh:14975klzzwxh:14976klzzwxh:14977klzzwxh:14978klzzwxh:14979klzzwxh:14980 klzzwxh:15542klzzwxh:14981klzzwxh:14982klzzwxh:14983klzzwxh:14984klzzwxh:14985klzzwxh:14986klzzwxh:14987 klzzwxh:15543klzzwxh:14988klzzwxh:14989klzzwxh:14990klzzwxh:14991klzzwxh:14992klzzwxh:14993klzzwxh:14994 // We deal with OTS klzzwxh:14784remote transactions and subtransactionsklzzwxh:14785klzzwxh:15544klzzwxh:14995klzzwxh:14996klzzwxh:14997klzzwxh:14998klzzwxh:14999klzzwxh:15000klzzwxh:15001 // first because we expect a higher likelyhood of failure overklzzwxh:15545klzzwxh:15002klzzwxh:15003klzzwxh:15004klzzwxh:15005klzzwxh:15006klzzwxh:15007klzzwxh:15008 // there, and we can easly recover over here.klzzwxh:15546klzzwxh:15009klzzwxh:15010klzzwxh:15011klzzwxh:15012klzzwxh:15013klzzwxh:15014klzzwxh:15015 if klzzwxh:14786 klzzwxh:14787resources klzzwxh:14788= null klzzwxh:14789 klzzwxh:14790klzzwxh:15547klzzwxh:15016klzzwxh:15017klzzwxh:15018klzzwxh:15019klzzwxh:15020klzzwxh:15021klzzwxh:15022klzzwxh:15023klzzwxh:15024klzzwxh:15025klzzwxh:15026 for klzzwxh:14791 int i = klzzwxh:14792resources.length ; i-- klzzwxh:15027 0 ; klzzwxh:14793 klzzwxh:14794klzzwxh:15548klzzwxh:15028klzzwxh:15029klzzwxh:15030klzzwxh:15031klzzwxh:15032klzzwxh:15033klzzwxh:15034klzzwxh:15035klzzwxh:15036klzzwxh:15037klzzwxh:15038klzzwxh:15039klzzwxh:15040klzzwxh:15041klzzwxh:15042 resource = klzzwxh:14795resourcesklzzwxh:14796 i klzzwxh:14797;klzzwxh:15549klzzwxh:15043klzzwxh:15044klzzwxh:15045klzzwxh:15046klzzwxh:15047klzzwxh:15048klzzwxh:15049klzzwxh:15050klzzwxh:15051klzzwxh:15052klzzwxh:15053klzzwxh:15054klzzwxh:15055klzzwxh:15056klzzwxh:15057 if klzzwxh:14798 resource == null klzzwxh:14799klzzwxh:15550klzzwxh:15058klzzwxh:15059klzzwxh:15060klzzwxh:15061klzzwxh:15062klzzwxh:15063klzzwxh:15064klzzwxh:15065klzzwxh:15066klzzwxh:15067klzzwxh:15068klzzwxh:15069klzzwxh:15070klzzwxh:15071klzzwxh:15072klzzwxh:15073klzzwxh:15074klzzwxh:15075klzzwxh:15076 continue;klzzwxh:15551klzzwxh:15077klzzwxh:15078klzzwxh:15079klzzwxh:15080klzzwxh:15081klzzwxh:15082klzzwxh:15083klzzwxh:15084klzzwxh:15085klzzwxh:15086klzzwxh:15087klzzwxh:15088klzzwxh:15089klzzwxh:15090klzzwxh:15091 try klzzwxh:14800klzzwxh:15552klzzwxh:15092klzzwxh:15093klzzwxh:15094klzzwxh:15095klzzwxh:15096klzzwxh:15097klzzwxh:15098klzzwxh:15099klzzwxh:15100klzzwxh:15101klzzwxh:15102klzzwxh:15103klzzwxh:15104klzzwxh:15105klzzwxh:15106klzzwxh:15107klzzwxh:15108klzzwxh:15109klzzwxh:15110 if klzzwxh:14801onePhaseCommitklzzwxh:14802klzzwxh:15553klzzwxh:15111klzzwxh:15112klzzwxh:15113klzzwxh:15114klzzwxh:15115klzzwxh:15116klzzwxh:15117klzzwxh:15118klzzwxh:15119klzzwxh:15120klzzwxh:15121klzzwxh:15122klzzwxh:15123klzzwxh:15124klzzwxh:15125klzzwxh:15126klzzwxh:15127klzzwxh:15128klzzwxh:15129klzzwxh:15130klzzwxh:15131klzzwxh:15132klzzwxh:15133 resource.commitklzzwxh:14803oneklzzwxh:14804phaseklzzwxh:14805klzzwxh:14806;klzzwxh:15554klzzwxh:15134klzzwxh:15135klzzwxh:15136klzzwxh:15137klzzwxh:15138klzzwxh:15139klzzwxh:15140klzzwxh:15141klzzwxh:15142klzzwxh:15143klzzwxh:15144klzzwxh:15145klzzwxh:15146klzzwxh:15147klzzwxh:15148klzzwxh:15149klzzwxh:15150klzzwxh:15151klzzwxh:15152 elseklzzwxh:15555klzzwxh:15153klzzwxh:15154klzzwxh:15155klzzwxh:15156klzzwxh:15157klzzwxh:15158klzzwxh:15159klzzwxh:15160klzzwxh:15161klzzwxh:15162klzzwxh:15163klzzwxh:15164klzzwxh:15165klzzwxh:15166klzzwxh:15167klzzwxh:15168klzzwxh:15169klzzwxh:15170klzzwxh:15171klzzwxh:15172klzzwxh:15173klzzwxh:15174klzzwxh:15175 resource.commitklzzwxh:14807klzzwxh:14808;klzzwxh:15556klzzwxh:15176klzzwxh:15177klzzwxh:15178klzzwxh:15179klzzwxh:15180klzzwxh:15181klzzwxh:15182klzzwxh:15183klzzwxh:15184klzzwxh:15185klzzwxh:15186klzzwxh:15187klzzwxh:15188klzzwxh:15189klzzwxh:15190klzzwxh:15191klzzwxh:15192klzzwxh:15193klzzwxh:15194 klzzwxh:15557klzzwxh:15195klzzwxh:15196klzzwxh:15197klzzwxh:15198klzzwxh:15199klzzwxh:15200klzzwxh:15201klzzwxh:15202klzzwxh:15203klzzwxh:15204klzzwxh:15205klzzwxh:15206klzzwxh:15207klzzwxh:15208klzzwxh:15209klzzwxh:15210klzzwxh:15211klzzwxh:15212klzzwxh:15213 // At least one resource commited, we are eitherklzzwxh:15558klzzwxh:15214klzzwxh:15215klzzwxh:15216klzzwxh:15217klzzwxh:15218klzzwxh:15219klzzwxh:15220klzzwxh:15221klzzwxh:15222klzzwxh:15223klzzwxh:15224klzzwxh:15225klzzwxh:15226klzzwxh:15227klzzwxh:15228klzzwxh:15229klzzwxh:15230klzzwxh:15231klzzwxh:15232 // commit or mixed.klzzwxh:15559klzzwxh:15233klzzwxh:15234klzzwxh:15235klzzwxh:15236klzzwxh:15237klzzwxh:15238klzzwxh:15239klzzwxh:15240klzzwxh:15241klzzwxh:15242klzzwxh:15243klzzwxh:15244klzzwxh:15245klzzwxh:15246klzzwxh:15247klzzwxh:15248klzzwxh:15249klzzwxh:15250klzzwxh:15251 klzzwxh:14809heuristic = klzzwxh:14810heuristic | Heuristic.COMMIT;klzzwxh:15560klzzwxh:15252klzzwxh:15253klzzwxh:15254klzzwxh:15255klzzwxh:15256klzzwxh:15257klzzwxh:15258klzzwxh:15259klzzwxh:15260klzzwxh:15261klzzwxh:15262klzzwxh:15263klzzwxh:15264klzzwxh:15265klzzwxh:15266 klzzwxh:14811 catch klzzwxh:14812 HeuristicMixed except klzzwxh:14813 klzzwxh:14814klzzwxh:15561klzzwxh:15267klzzwxh:15268klzzwxh:15269klzzwxh:15270klzzwxh:15271klzzwxh:15272klzzwxh:15273klzzwxh:15274klzzwxh:15275klzzwxh:15276klzzwxh:15277klzzwxh:15278klzzwxh:15279klzzwxh:15280klzzwxh:15281klzzwxh:15282klzzwxh:15283klzzwxh:15284klzzwxh:15285 klzzwxh:14815heuristic = klzzwxh:14816heuristic | Heuristic.MIXED;klzzwxh:15562klzzwxh:15286klzzwxh:15287klzzwxh:15288klzzwxh:15289klzzwxh:15290klzzwxh:15291klzzwxh:15292klzzwxh:15293klzzwxh:15294klzzwxh:15295klzzwxh:15296klzzwxh:15297klzzwxh:15298klzzwxh:15299klzzwxh:15300 klzzwxh:14817 catch klzzwxh:14818 HeuristicHazard except klzzwxh:14819 klzzwxh:14820klzzwxh:15563klzzwxh:15301klzzwxh:15302klzzwxh:15303klzzwxh:15304klzzwxh:15305klzzwxh:15306klzzwxh:15307klzzwxh:15308klzzwxh:15309klzzwxh:15310klzzwxh:15311klzzwxh:15312klzzwxh:15313klzzwxh:15314klzzwxh:15315klzzwxh:15316klzzwxh:15317klzzwxh:15318klzzwxh:15319 klzzwxh:14821heuristic = klzzwxh:14822heuristic | Heuristic.HAZARD;klzzwxh:15564klzzwxh:15320klzzwxh:15321klzzwxh:15322klzzwxh:15323klzzwxh:15324klzzwxh:15325klzzwxh:15326klzzwxh:15327klzzwxh:15328klzzwxh:15329klzzwxh:15330klzzwxh:15331klzzwxh:15332klzzwxh:15333klzzwxh:15334 klzzwxh:14823 catch klzzwxh:14824 HeuristicRollback except klzzwxh:14825 klzzwxh:14826klzzwxh:15565klzzwxh:15335klzzwxh:15336klzzwxh:15337klzzwxh:15338klzzwxh:15339klzzwxh:15340klzzwxh:15341klzzwxh:15342klzzwxh:15343klzzwxh:15344klzzwxh:15345klzzwxh:15346klzzwxh:15347klzzwxh:15348klzzwxh:15349klzzwxh:15350klzzwxh:15351klzzwxh:15352klzzwxh:15353 klzzwxh:14827heuristic = klzzwxh:14828heuristic | Heuristic.ROLLBACK;klzzwxh:15566klzzwxh:15354klzzwxh:15355klzzwxh:15356klzzwxh:15357klzzwxh:15358klzzwxh:15359klzzwxh:15360klzzwxh:15361klzzwxh:15362klzzwxh:15363klzzwxh:15364klzzwxh:15365klzzwxh:15366klzzwxh:15367klzzwxh:15368 klzzwxh:14829 catch klzzwxh:14830 Exception except klzzwxh:14831 klzzwxh:14832klzzwxh:15567klzzwxh:15369klzzwxh:15370klzzwxh:15371klzzwxh:15372klzzwxh:15373klzzwxh:15374klzzwxh:15375klzzwxh:15376klzzwxh:15377klzzwxh:15378klzzwxh:15379klzzwxh:15380klzzwxh:15381klzzwxh:15382klzzwxh:15383klzzwxh:15384klzzwxh:15385klzzwxh:15386klzzwxh:15387 if klzzwxh:14833 except instanceof TRANSACTIONklzzwxh:14834ROLLEDBACK klzzwxh:14835klzzwxh:15568klzzwxh:15388klzzwxh:15389klzzwxh:15390klzzwxh:15391klzzwxh:15392klzzwxh:15393klzzwxh:15394klzzwxh:15395klzzwxh:15396klzzwxh:15397klzzwxh:15398klzzwxh:15399klzzwxh:15400klzzwxh:15401klzzwxh:15402klzzwxh:15403klzzwxh:15404klzzwxh:15405klzzwxh:15406klzzwxh:15407klzzwxh:15408klzzwxh:15409klzzwxh:15410 klzzwxh:14836heuristic = klzzwxh:14837heuristic | Heuristic.ROLLBACK;klzzwxh:15569klzzwxh:15411klzzwxh:15412klzzwxh:15413klzzwxh:15414klzzwxh:15415klzzwxh:15416klzzwxh:15417klzzwxh:15418klzzwxh:15419klzzwxh:15420klzzwxh:15421klzzwxh:15422klzzwxh:15423klzzwxh:15424klzzwxh:15425klzzwxh:15426klzzwxh:15427klzzwxh:15428klzzwxh:15429 else klzzwxh:14838klzzwxh:15570klzzwxh:15430klzzwxh:15431klzzwxh:15432klzzwxh:15433klzzwxh:15434klzzwxh:15435klzzwxh:15436klzzwxh:15437klzzwxh:15438klzzwxh:15439klzzwxh:15440klzzwxh:15441klzzwxh:15442klzzwxh:15443klzzwxh:15444klzzwxh:15445klzzwxh:15446klzzwxh:15447klzzwxh:15448klzzwxh:15449klzzwxh:15450klzzwxh:15451klzzwxh:15452 klzzwxh:14839heuristic = klzzwxh:14840heuristic | Heuristic.HAZARD;klzzwxh:15571klzzwxh:15453klzzwxh:15454klzzwxh:15455klzzwxh:15456klzzwxh:15457klzzwxh:15458klzzwxh:15459klzzwxh:15460klzzwxh:15461klzzwxh:15462klzzwxh:15463klzzwxh:15464klzzwxh:15465klzzwxh:15466klzzwxh:15467klzzwxh:15468klzzwxh:15469klzzwxh:15470klzzwxh:15471klzzwxh:15472klzzwxh:15473klzzwxh:15474klzzwxh:15475 errorklzzwxh:14841 except klzzwxh:14842;klzzwxh:15572klzzwxh:15476klzzwxh:15477klzzwxh:15478klzzwxh:15479klzzwxh:15480klzzwxh:15481klzzwxh:15482klzzwxh:15483klzzwxh:15484klzzwxh:15485klzzwxh:15486klzzwxh:15487klzzwxh:15488klzzwxh:15489klzzwxh:15490klzzwxh:15491klzzwxh:15492klzzwxh:15493klzzwxh:15494 klzzwxh:14843klzzwxh:15573klzzwxh:15495klzzwxh:15496klzzwxh:15497klzzwxh:15498klzzwxh:15499klzzwxh:15500klzzwxh:15501klzzwxh:15502klzzwxh:15503klzzwxh:15504klzzwxh:15505klzzwxh:15506klzzwxh:15507klzzwxh:15508klzzwxh:15509 klzzwxh:14844klzzwxh:15574klzzwxh:15510klzzwxh:15511klzzwxh:15512klzzwxh:15513klzzwxh:15514klzzwxh:15515klzzwxh:15516klzzwxh:15517klzzwxh:15518klzzwxh:15519klzzwxh:15520 klzzwxh:14845klzzwxh:15575klzzwxh:15521klzzwxh:15522klzzwxh:15523klzzwxh:15524klzzwxh:15525klzzwxh:15526klzzwxh:15527 klzzwxh:14846

klzzwxh:15600klzzwxh:15601klzzwxh:15602klzzwxh:15603klzzwxh:15604klzzwxh:15605klzzwxh:15606 if klzzwxh:15576 klzzwxh:15577enlisted klzzwxh:15578= null klzzwxh:15579klzzwxh:15667klzzwxh:15607klzzwxh:15608klzzwxh:15609klzzwxh:15610klzzwxh:15611klzzwxh:15612klzzwxh:15613klzzwxh:15614klzzwxh:15615klzzwxh:15616klzzwxh:15617 commitXAResourcesklzzwxh:15580 klzzwxh:15581enlisted, onePhaseCommit klzzwxh:15582;klzzwxh:15668klzzwxh:15618klzzwxh:15619klzzwxh:15620klzzwxh:15621klzzwxh:15622klzzwxh:15623klzzwxh:15624 if klzzwxh:15583 klzzwxh:15584delisted klzzwxh:15585= nullklzzwxh:15586klzzwxh:15669klzzwxh:15625klzzwxh:15626klzzwxh:15627klzzwxh:15628klzzwxh:15629klzzwxh:15630klzzwxh:15631klzzwxh:15632klzzwxh:15633klzzwxh:15634klzzwxh:15635 commitXAResourcesklzzwxh:15587 klzzwxh:15588delisted, onePhaseCommit klzzwxh:15589;klzzwxh:15636klzzwxh:15637klzzwxh:15638 klzzwxh:15670klzzwxh:15639klzzwxh:15640klzzwxh:15641klzzwxh:15642klzzwxh:15643klzzwxh:15644klzzwxh:15645 klzzwxh:15671klzzwxh:15646klzzwxh:15647klzzwxh:15648klzzwxh:15649klzzwxh:15650klzzwxh:15651klzzwxh:15652 klzzwxh:15590status = STATUSklzzwxh:15591COMMITTED;klzzwxh:15672klzzwxh:15653klzzwxh:15654klzzwxh:15655klzzwxh:15656klzzwxh:15657klzzwxh:15658klzzwxh:15659 klzzwxh:15592heuristic = normalizeklzzwxh:15593 klzzwxh:15594heuristic klzzwxh:15595;klzzwxh:15673klzzwxh:15660klzzwxh:15661klzzwxh:15662klzzwxh:15663klzzwxh:15664klzzwxh:15665klzzwxh:15666 klzzwxh:15596txDomain.notifyCompletionklzzwxh:15597 this, klzzwxh:15598heuristic klzzwxh:15599;

klzzwxh:15714klzzwxh:15715klzzwxh:15716klzzwxh:15717klzzwxh:15718klzzwxh:15719klzzwxh:15720 // We record the transaction only if two-phase commit,klzzwxh:16137klzzwxh:15721klzzwxh:15722klzzwxh:15723klzzwxh:15724klzzwxh:15725klzzwxh:15726klzzwxh:15727 // or we didn't expect the heuristic decision.klzzwxh:16138klzzwxh:15728klzzwxh:15729klzzwxh:15730klzzwxh:15731klzzwxh:15732klzzwxh:15733klzzwxh:15734 if klzzwxh:15674 klzzwxh:15675txDomain.klzzwxh:15676journal klzzwxh:15677= null klzzwxh:15678 klzzwxh:15679klzzwxh:16139klzzwxh:15735klzzwxh:15736klzzwxh:15737klzzwxh:15738klzzwxh:15739klzzwxh:15740klzzwxh:15741klzzwxh:15742klzzwxh:15743klzzwxh:15744klzzwxh:15745 switch klzzwxh:15680 klzzwxh:15681heuristic klzzwxh:15682 klzzwxh:15683klzzwxh:16140klzzwxh:15746klzzwxh:15747klzzwxh:15748klzzwxh:15749klzzwxh:15750klzzwxh:15751klzzwxh:15752klzzwxh:15753klzzwxh:15754klzzwxh:15755klzzwxh:15756 case Heuristic.COMMIT:klzzwxh:16141klzzwxh:15757klzzwxh:15758klzzwxh:15759klzzwxh:15760klzzwxh:15761klzzwxh:15762klzzwxh:15763klzzwxh:15764klzzwxh:15765klzzwxh:15766klzzwxh:15767klzzwxh:15768klzzwxh:15769klzzwxh:15770klzzwxh:15771 decision = XAException.XAklzzwxh:15684HEURCOM;klzzwxh:16142klzzwxh:15772klzzwxh:15773klzzwxh:15774klzzwxh:15775klzzwxh:15776klzzwxh:15777klzzwxh:15778klzzwxh:15779klzzwxh:15780klzzwxh:15781klzzwxh:15782klzzwxh:15783klzzwxh:15784klzzwxh:15785klzzwxh:15786 break;klzzwxh:16143klzzwxh:15787klzzwxh:15788klzzwxh:15789klzzwxh:15790klzzwxh:15791klzzwxh:15792klzzwxh:15793klzzwxh:15794klzzwxh:15795klzzwxh:15796klzzwxh:15797 case Heuristic.ROLLBACK:klzzwxh:16144klzzwxh:15798klzzwxh:15799klzzwxh:15800klzzwxh:15801klzzwxh:15802klzzwxh:15803klzzwxh:15804klzzwxh:15805klzzwxh:15806klzzwxh:15807klzzwxh:15808klzzwxh:15809klzzwxh:15810klzzwxh:15811klzzwxh:15812 decision = XAException.XAklzzwxh:15685HEURRB;klzzwxh:16145klzzwxh:15813klzzwxh:15814klzzwxh:15815klzzwxh:15816klzzwxh:15817klzzwxh:15818klzzwxh:15819klzzwxh:15820klzzwxh:15821klzzwxh:15822klzzwxh:15823klzzwxh:15824klzzwxh:15825klzzwxh:15826klzzwxh:15827 klzzwxh:15686twoPhase = true;klzzwxh:16146klzzwxh:15828klzzwxh:15829klzzwxh:15830klzzwxh:15831klzzwxh:15832klzzwxh:15833klzzwxh:15834klzzwxh:15835klzzwxh:15836klzzwxh:15837klzzwxh:15838klzzwxh:15839klzzwxh:15840klzzwxh:15841klzzwxh:15842 break;klzzwxh:16147klzzwxh:15843klzzwxh:15844klzzwxh:15845klzzwxh:15846klzzwxh:15847klzzwxh:15848klzzwxh:15849klzzwxh:15850klzzwxh:15851klzzwxh:15852klzzwxh:15853 case Heuristic.MIXED:klzzwxh:16148klzzwxh:15854klzzwxh:15855klzzwxh:15856klzzwxh:15857klzzwxh:15858klzzwxh:15859klzzwxh:15860klzzwxh:15861klzzwxh:15862klzzwxh:15863klzzwxh:15864klzzwxh:15865klzzwxh:15866klzzwxh:15867klzzwxh:15868 decision = XAException.XAklzzwxh:15687HEURMIX;klzzwxh:16149klzzwxh:15869klzzwxh:15870klzzwxh:15871klzzwxh:15872klzzwxh:15873klzzwxh:15874klzzwxh:15875klzzwxh:15876klzzwxh:15877klzzwxh:15878klzzwxh:15879klzzwxh:15880klzzwxh:15881klzzwxh:15882klzzwxh:15883 klzzwxh:15688twoPhase = true;klzzwxh:16150klzzwxh:15884klzzwxh:15885klzzwxh:15886klzzwxh:15887klzzwxh:15888klzzwxh:15889klzzwxh:15890klzzwxh:15891klzzwxh:15892klzzwxh:15893klzzwxh:15894klzzwxh:15895klzzwxh:15896klzzwxh:15897klzzwxh:15898 break;klzzwxh:16151klzzwxh:15899klzzwxh:15900klzzwxh:15901klzzwxh:15902klzzwxh:15903klzzwxh:15904klzzwxh:15905klzzwxh:15906klzzwxh:15907klzzwxh:15908klzzwxh:15909 case Heuristic.HAZARD:klzzwxh:16152klzzwxh:15910klzzwxh:15911klzzwxh:15912klzzwxh:15913klzzwxh:15914klzzwxh:15915klzzwxh:15916klzzwxh:15917klzzwxh:15918klzzwxh:15919klzzwxh:15920klzzwxh:15921klzzwxh:15922klzzwxh:15923klzzwxh:15924 decision = XAException.XAklzzwxh:15689HEURHAZ;klzzwxh:16153klzzwxh:15925klzzwxh:15926klzzwxh:15927klzzwxh:15928klzzwxh:15929klzzwxh:15930klzzwxh:15931klzzwxh:15932klzzwxh:15933klzzwxh:15934klzzwxh:15935klzzwxh:15936klzzwxh:15937klzzwxh:15938klzzwxh:15939 klzzwxh:15690twoPhase = true;klzzwxh:16154klzzwxh:15940klzzwxh:15941klzzwxh:15942klzzwxh:15943klzzwxh:15944klzzwxh:15945klzzwxh:15946klzzwxh:15947klzzwxh:15948klzzwxh:15949klzzwxh:15950klzzwxh:15951klzzwxh:15952klzzwxh:15953klzzwxh:15954 break;klzzwxh:16155klzzwxh:15955klzzwxh:15956klzzwxh:15957klzzwxh:15958klzzwxh:15959klzzwxh:15960klzzwxh:15961klzzwxh:15962klzzwxh:15963klzzwxh:15964klzzwxh:15965 default:klzzwxh:16156klzzwxh:15966klzzwxh:15967klzzwxh:15968klzzwxh:15969klzzwxh:15970klzzwxh:15971klzzwxh:15972klzzwxh:15973klzzwxh:15974klzzwxh:15975klzzwxh:15976klzzwxh:15977klzzwxh:15978klzzwxh:15979klzzwxh:15980 decision = XAException.XAklzzwxh:15691RBOTHER;klzzwxh:16157klzzwxh:15981klzzwxh:15982klzzwxh:15983klzzwxh:15984klzzwxh:15985klzzwxh:15986klzzwxh:15987klzzwxh:15988klzzwxh:15989klzzwxh:15990klzzwxh:15991klzzwxh:15992klzzwxh:15993klzzwxh:15994klzzwxh:15995 klzzwxh:15692twoPhase = true;klzzwxh:16158klzzwxh:15996klzzwxh:15997klzzwxh:15998klzzwxh:15999klzzwxh:16000klzzwxh:16001klzzwxh:16002klzzwxh:16003klzzwxh:16004klzzwxh:16005klzzwxh:16006klzzwxh:16007klzzwxh:16008klzzwxh:16009klzzwxh:16010 break;klzzwxh:16159klzzwxh:16011klzzwxh:16012klzzwxh:16013klzzwxh:16014klzzwxh:16015klzzwxh:16016klzzwxh:16017klzzwxh:16018klzzwxh:16019klzzwxh:16020klzzwxh:16021 klzzwxh:15693klzzwxh:16160klzzwxh:16022klzzwxh:16023klzzwxh:16024klzzwxh:16025klzzwxh:16026klzzwxh:16027klzzwxh:16028klzzwxh:16029klzzwxh:16030klzzwxh:16031klzzwxh:16032 if klzzwxh:15694 klzzwxh:15695twoPhase klzzwxh:15696 klzzwxh:15697klzzwxh:16161klzzwxh:16033klzzwxh:16034klzzwxh:16035klzzwxh:16036klzzwxh:16037klzzwxh:16038klzzwxh:16039klzzwxh:16040klzzwxh:16041klzzwxh:16042klzzwxh:16043klzzwxh:16044klzzwxh:16045klzzwxh:16046klzzwxh:16047 try klzzwxh:15698klzzwxh:16162klzzwxh:16048klzzwxh:16049klzzwxh:16050klzzwxh:16051klzzwxh:16052klzzwxh:16053klzzwxh:16054klzzwxh:16055klzzwxh:16056klzzwxh:16057klzzwxh:16058klzzwxh:16059klzzwxh:16060klzzwxh:16061klzzwxh:16062klzzwxh:16063klzzwxh:16064klzzwxh:16065klzzwxh:16066 klzzwxh:15699txDomain.klzzwxh:15700journal.commitklzzwxh:15701 klzzwxh:15702xid, decision klzzwxh:15703;klzzwxh:16163klzzwxh:16067klzzwxh:16068klzzwxh:16069klzzwxh:16070klzzwxh:16071klzzwxh:16072klzzwxh:16073klzzwxh:16074klzzwxh:16075klzzwxh:16076klzzwxh:16077klzzwxh:16078klzzwxh:16079klzzwxh:16080klzzwxh:16081 klzzwxh:15704 catch klzzwxh:15705 SystemException except klzzwxh:15706 klzzwxh:15707klzzwxh:16164klzzwxh:16082klzzwxh:16083klzzwxh:16084klzzwxh:16085klzzwxh:16086klzzwxh:16087klzzwxh:16088klzzwxh:16089klzzwxh:16090klzzwxh:16091klzzwxh:16092klzzwxh:16093klzzwxh:16094klzzwxh:16095klzzwxh:16096klzzwxh:16097klzzwxh:16098klzzwxh:16099klzzwxh:16100 errorklzzwxh:15708 except klzzwxh:15709;klzzwxh:16165klzzwxh:16101klzzwxh:16102klzzwxh:16103klzzwxh:16104klzzwxh:16105klzzwxh:16106klzzwxh:16107klzzwxh:16108klzzwxh:16109klzzwxh:16110klzzwxh:16111klzzwxh:16112klzzwxh:16113klzzwxh:16114klzzwxh:16115 klzzwxh:15710klzzwxh:16166klzzwxh:16116klzzwxh:16117klzzwxh:16118klzzwxh:16119klzzwxh:16120klzzwxh:16121klzzwxh:16122klzzwxh:16123klzzwxh:16124klzzwxh:16125klzzwxh:16126 klzzwxh:15711klzzwxh:16167klzzwxh:16127klzzwxh:16128klzzwxh:16129klzzwxh:16130klzzwxh:16131klzzwxh:16132klzzwxh:16133 klzzwxh:15712klzzwxh:16168klzzwxh:16134klzzwxh:16135klzzwxh:16136 klzzwxh:15713

klzzwxh:16208klzzwxh:16209klzzwxh:16210 /klzzwxh:16169klzzwxh:16170klzzwxh:16333klzzwxh:16211klzzwxh:16212klzzwxh:16213klzzwxh:16214 klzzwxh:16171 Called to perform the actual rollback on the transaction.klzzwxh:16334klzzwxh:16215klzzwxh:16216klzzwxh:16217klzzwxh:16218 klzzwxh:16172 Will force a rollback on all the enlisted resources andklzzwxh:16335klzzwxh:16219klzzwxh:16220klzzwxh:16221klzzwxh:16222 klzzwxh:16173 delisted resources and returnklzzwxh:16336klzzwxh:16223klzzwxh:16224klzzwxh:16225klzzwxh:16226 klzzwxh:16174 the heuristic decision of the rollback. Multiple calls areklzzwxh:16337klzzwxh:16227klzzwxh:16228klzzwxh:16229klzzwxh:16230 klzzwxh:16175 supported.klzzwxh:16338klzzwxh:16231klzzwxh:16232klzzwxh:16233klzzwxh:16234 klzzwxh:16176 klzzwxh:16235pklzzwxh:16236klzzwxh:16339klzzwxh:16237klzzwxh:16238klzzwxh:16239klzzwxh:16240 klzzwxh:16177 The heuristic decision can be any of the following:klzzwxh:16340klzzwxh:16241klzzwxh:16242klzzwxh:16243klzzwxh:16244 klzzwxh:16178 klzzwxh:16245ulklzzwxh:16246klzzwxh:16341klzzwxh:16247klzzwxh:16248klzzwxh:16249klzzwxh:16250 klzzwxh:16179 klzzwxh:16251liklzzwxh:16252klzzwxh:16180@link klzzwxh:16181Heuristic.READONLYklzzwxh:16182 There were no resources for thisklzzwxh:16342klzzwxh:16253klzzwxh:16254klzzwxh:16255klzzwxh:16256 klzzwxh:16183 transaction, or all resources are read only -- there is no need toklzzwxh:16343klzzwxh:16257klzzwxh:16258klzzwxh:16259klzzwxh:16260 klzzwxh:16184 commit/rollback this transactionklzzwxh:16344klzzwxh:16261klzzwxh:16262klzzwxh:16263klzzwxh:16264 klzzwxh:16185 klzzwxh:16265liklzzwxh:16266klzzwxh:16186@link klzzwxh:16187Heuristic.COMMITklzzwxh:16188 All resources have decided to commitklzzwxh:16345klzzwxh:16267klzzwxh:16268klzzwxh:16269klzzwxh:16270 klzzwxh:16189 klzzwxh:16271liklzzwxh:16272klzzwxh:16190@link klzzwxh:16191Heuristic.ROLLBACKklzzwxh:16192 All resources have rolled backklzzwxh:16346klzzwxh:16273klzzwxh:16274klzzwxh:16275klzzwxh:16276 klzzwxh:16193 klzzwxh:16194except for read-only resourcesklzzwxh:16195klzzwxh:16347klzzwxh:16277klzzwxh:16278klzzwxh:16279klzzwxh:16280 klzzwxh:16196 klzzwxh:16281liklzzwxh:16282klzzwxh:16197@link klzzwxh:16198Heuristic.MIXEDklzzwxh:16199 Some resources have already commited,klzzwxh:16348klzzwxh:16283klzzwxh:16284klzzwxh:16285klzzwxh:16286 klzzwxh:16200 others have rolled backklzzwxh:16349klzzwxh:16287klzzwxh:16288klzzwxh:16289klzzwxh:16290 klzzwxh:16201 klzzwxh:16291/ulklzzwxh:16292klzzwxh:16350klzzwxh:16293klzzwxh:16294klzzwxh:16295klzzwxh:16296 klzzwxh:16202klzzwxh:16351klzzwxh:16297klzzwxh:16298klzzwxh:16299klzzwxh:16300 klzzwxh:16203 @throws IllegalStateException The transaction is not activeklzzwxh:16352klzzwxh:16301klzzwxh:16302klzzwxh:16303klzzwxh:16304 klzzwxh:16204/klzzwxh:16353klzzwxh:16305klzzwxh:16306klzzwxh:16307 protected void internalRollbackklzzwxh:16205klzzwxh:16206klzzwxh:16354klzzwxh:16308klzzwxh:16309klzzwxh:16310 klzzwxh:16207klzzwxh:16355klzzwxh:16311klzzwxh:16312klzzwxh:16313klzzwxh:16314klzzwxh:16315klzzwxh:16316klzzwxh:16317 Resourceklzzwxh:16318klzzwxh:16319klzzwxh:16320klzzwxh:16321klzzwxh:16322klzzwxh:16323klzzwxh:16324klzzwxh:16325 resource;klzzwxh:16356klzzwxh:16326klzzwxh:16327klzzwxh:16328klzzwxh:16329klzzwxh:16330klzzwxh:16331klzzwxh:16332 InternalXAResourceHolder resHolder;

klzzwxh:16521klzzwxh:16522klzzwxh:16523klzzwxh:16524klzzwxh:16525klzzwxh:16526klzzwxh:16527 // Check the status of the transaction and act accordingly.klzzwxh:17639klzzwxh:16528klzzwxh:16529klzzwxh:16530klzzwxh:16531klzzwxh:16532klzzwxh:16533klzzwxh:16534 switch klzzwxh:16357 klzzwxh:16358status klzzwxh:16359 klzzwxh:16360klzzwxh:17640klzzwxh:16535klzzwxh:16536klzzwxh:16537klzzwxh:16538klzzwxh:16539klzzwxh:16540klzzwxh:16541 case STATUSklzzwxh:16361ACTIVE:klzzwxh:17641klzzwxh:16542klzzwxh:16543klzzwxh:16544klzzwxh:16545klzzwxh:16546klzzwxh:16547klzzwxh:16548 case STATUSklzzwxh:16362MARKEDklzzwxh:16363ROLLBACK:klzzwxh:17642klzzwxh:16549klzzwxh:16550klzzwxh:16551klzzwxh:16552klzzwxh:16553klzzwxh:16554klzzwxh:16555klzzwxh:16556klzzwxh:16557klzzwxh:16558klzzwxh:16559 // Transaction is active, we'll roll it back.klzzwxh:17643klzzwxh:16560klzzwxh:16561klzzwxh:16562klzzwxh:16563klzzwxh:16564klzzwxh:16565klzzwxh:16566klzzwxh:16567klzzwxh:16568klzzwxh:16569klzzwxh:16570 break;klzzwxh:17644klzzwxh:16571klzzwxh:16572klzzwxh:16573klzzwxh:16574klzzwxh:16575klzzwxh:16576klzzwxh:16577 case STATUSklzzwxh:16364PREPARED:klzzwxh:17645klzzwxh:16578klzzwxh:16579klzzwxh:16580klzzwxh:16581klzzwxh:16582klzzwxh:16583klzzwxh:16584 case STATUSklzzwxh:16365PREPARING:klzzwxh:17646klzzwxh:16585klzzwxh:16586klzzwxh:16587klzzwxh:16588klzzwxh:16589klzzwxh:16590klzzwxh:16591 case STATUSklzzwxh:16366COMMITTING:klzzwxh:17647klzzwxh:16592klzzwxh:16593klzzwxh:16594klzzwxh:16595klzzwxh:16596klzzwxh:16597klzzwxh:16598klzzwxh:16599klzzwxh:16600klzzwxh:16601klzzwxh:16602 // Transaction is right now in the process of being commited.klzzwxh:17648klzzwxh:16603klzzwxh:16604klzzwxh:16605klzzwxh:16606klzzwxh:16607klzzwxh:16608klzzwxh:16609klzzwxh:16610klzzwxh:16611klzzwxh:16612klzzwxh:16613 throw new IllegalStateExceptionklzzwxh:16367 Messages.messageklzzwxh:16368 klzzwxh:16614tyrex.tx.inCommitklzzwxh:16615 klzzwxh:16369 klzzwxh:16370;klzzwxh:17649klzzwxh:16616klzzwxh:16617klzzwxh:16618klzzwxh:16619klzzwxh:16620klzzwxh:16621klzzwxh:16622 case STATUSklzzwxh:16371ROLLINGklzzwxh:16372BACK:klzzwxh:17650klzzwxh:16623klzzwxh:16624klzzwxh:16625klzzwxh:16626klzzwxh:16627klzzwxh:16628klzzwxh:16629klzzwxh:16630klzzwxh:16631klzzwxh:16632klzzwxh:16633 // Transaction has been or is being rolled back, just leave.klzzwxh:17651klzzwxh:16634klzzwxh:16635klzzwxh:16636klzzwxh:16637klzzwxh:16638klzzwxh:16639klzzwxh:16640klzzwxh:16641klzzwxh:16642klzzwxh:16643klzzwxh:16644 klzzwxh:16373heuristic = Heuristic.ROLLBACK;klzzwxh:17652klzzwxh:16645klzzwxh:16646klzzwxh:16647klzzwxh:16648klzzwxh:16649klzzwxh:16650klzzwxh:16651klzzwxh:16652klzzwxh:16653klzzwxh:16654klzzwxh:16655 return;klzzwxh:17653klzzwxh:16656klzzwxh:16657klzzwxh:16658klzzwxh:16659klzzwxh:16660klzzwxh:16661klzzwxh:16662 case STATUSklzzwxh:16374NOklzzwxh:16375TRANSACTION:klzzwxh:17654klzzwxh:16663klzzwxh:16664klzzwxh:16665klzzwxh:16666klzzwxh:16667klzzwxh:16668klzzwxh:16669 case STATUSklzzwxh:16376UNKNOWN:klzzwxh:17655klzzwxh:16670klzzwxh:16671klzzwxh:16672klzzwxh:16673klzzwxh:16674klzzwxh:16675klzzwxh:16676 default:klzzwxh:17656klzzwxh:16677klzzwxh:16678klzzwxh:16679klzzwxh:16680klzzwxh:16681klzzwxh:16682klzzwxh:16683klzzwxh:16684klzzwxh:16685klzzwxh:16686klzzwxh:16687 throw new IllegalStateExceptionklzzwxh:16377 Messages.messageklzzwxh:16378 klzzwxh:16688tyrex.tx.inactiveklzzwxh:16689 klzzwxh:16379 klzzwxh:16380;klzzwxh:17657klzzwxh:16690klzzwxh:16691klzzwxh:16692klzzwxh:16693klzzwxh:16694klzzwxh:16695klzzwxh:16696 case STATUSklzzwxh:16381COMMITTED:klzzwxh:17658klzzwxh:16697klzzwxh:16698klzzwxh:16699klzzwxh:16700klzzwxh:16701klzzwxh:16702klzzwxh:16703 case STATUSklzzwxh:16382ROLLEDBACK:klzzwxh:17659klzzwxh:16704klzzwxh:16705klzzwxh:16706klzzwxh:16707klzzwxh:16708klzzwxh:16709klzzwxh:16710klzzwxh:16711klzzwxh:16712klzzwxh:16713klzzwxh:16714 // If already rolled back or committed we just return.klzzwxh:17660klzzwxh:16715klzzwxh:16716klzzwxh:16717klzzwxh:16718klzzwxh:16719klzzwxh:16720klzzwxh:16721klzzwxh:16722klzzwxh:16723klzzwxh:16724klzzwxh:16725 // The previous heuristic is still remembered.klzzwxh:17661klzzwxh:16726klzzwxh:16727klzzwxh:16728klzzwxh:16729klzzwxh:16730klzzwxh:16731klzzwxh:16732klzzwxh:16733klzzwxh:16734klzzwxh:16735klzzwxh:16736 return;klzzwxh:17662klzzwxh:16737klzzwxh:16738klzzwxh:16739klzzwxh:16740klzzwxh:16741klzzwxh:16742klzzwxh:16743 klzzwxh:16383klzzwxh:17663klzzwxh:16744klzzwxh:16745klzzwxh:16746 klzzwxh:17664klzzwxh:16747klzzwxh:16748klzzwxh:16749klzzwxh:16750klzzwxh:16751klzzwxh:16752klzzwxh:16753 // If we got to this point, we'll start rolling back theklzzwxh:17665klzzwxh:16754klzzwxh:16755klzzwxh:16756klzzwxh:16757klzzwxh:16758klzzwxh:16759klzzwxh:16760 // transaction. Change the status immediately, so theklzzwxh:17666klzzwxh:16761klzzwxh:16762klzzwxh:16763klzzwxh:16764klzzwxh:16765klzzwxh:16766klzzwxh:16767 // transaction cannot be altered by a synchronizationklzzwxh:17667klzzwxh:16768klzzwxh:16769klzzwxh:16770klzzwxh:16771klzzwxh:16772klzzwxh:16773klzzwxh:16774 // or XA resource. Our initial heuristic is read-only,klzzwxh:17668klzzwxh:16775klzzwxh:16776klzzwxh:16777klzzwxh:16778klzzwxh:16779klzzwxh:16780klzzwxh:16781 // since unless there's at least one rollback resource,klzzwxh:17669klzzwxh:16782klzzwxh:16783klzzwxh:16784klzzwxh:16785klzzwxh:16786klzzwxh:16787klzzwxh:16788 // we never truely rollback.klzzwxh:17670klzzwxh:16789klzzwxh:16790klzzwxh:16791klzzwxh:16792klzzwxh:16793klzzwxh:16794klzzwxh:16795 klzzwxh:16384status = STATUSklzzwxh:16385ROLLINGklzzwxh:16386BACK;klzzwxh:17671klzzwxh:16796klzzwxh:16797klzzwxh:16798klzzwxh:16799klzzwxh:16800klzzwxh:16801klzzwxh:16802 klzzwxh:16387heuristic = Heuristic.READONLY;klzzwxh:17672klzzwxh:16803klzzwxh:16804klzzwxh:16805klzzwxh:16806klzzwxh:16807klzzwxh:16808klzzwxh:16809 klzzwxh:17673klzzwxh:16810klzzwxh:16811klzzwxh:16812klzzwxh:16813klzzwxh:16814klzzwxh:16815klzzwxh:16816 if klzzwxh:16388 klzzwxh:16389resources klzzwxh:16390= null klzzwxh:16391 klzzwxh:16392klzzwxh:17674klzzwxh:16817klzzwxh:16818klzzwxh:16819klzzwxh:16820klzzwxh:16821klzzwxh:16822klzzwxh:16823klzzwxh:16824klzzwxh:16825klzzwxh:16826klzzwxh:16827 // Tell all the OTS resources to rollback their transactionklzzwxh:17675klzzwxh:16828klzzwxh:16829klzzwxh:16830klzzwxh:16831klzzwxh:16832klzzwxh:16833klzzwxh:16834klzzwxh:16835klzzwxh:16836klzzwxh:16837klzzwxh:16838 // regardless of state.klzzwxh:17676klzzwxh:16839klzzwxh:16840klzzwxh:16841klzzwxh:16842klzzwxh:16843klzzwxh:16844klzzwxh:16845klzzwxh:16846klzzwxh:16847klzzwxh:16848klzzwxh:16849 for klzzwxh:16393 int i = klzzwxh:16394resources.length ; i-- klzzwxh:16850 0 ; klzzwxh:16395 klzzwxh:16396klzzwxh:17677klzzwxh:16851klzzwxh:16852klzzwxh:16853klzzwxh:16854klzzwxh:16855klzzwxh:16856klzzwxh:16857klzzwxh:16858klzzwxh:16859klzzwxh:16860klzzwxh:16861klzzwxh:16862klzzwxh:16863klzzwxh:16864klzzwxh:16865 resource = klzzwxh:16397resourcesklzzwxh:16398 i klzzwxh:16399;klzzwxh:17678klzzwxh:16866klzzwxh:16867klzzwxh:16868klzzwxh:16869klzzwxh:16870klzzwxh:16871klzzwxh:16872klzzwxh:16873klzzwxh:16874klzzwxh:16875klzzwxh:16876klzzwxh:16877klzzwxh:16878klzzwxh:16879klzzwxh:16880 if klzzwxh:16400 resource == null klzzwxh:16401klzzwxh:17679klzzwxh:16881klzzwxh:16882klzzwxh:16883klzzwxh:16884klzzwxh:16885klzzwxh:16886klzzwxh:16887klzzwxh:16888klzzwxh:16889klzzwxh:16890klzzwxh:16891klzzwxh:16892klzzwxh:16893klzzwxh:16894klzzwxh:16895klzzwxh:16896klzzwxh:16897klzzwxh:16898klzzwxh:16899 continue;klzzwxh:17680klzzwxh:16900klzzwxh:16901klzzwxh:16902klzzwxh:16903klzzwxh:16904klzzwxh:16905klzzwxh:16906klzzwxh:16907klzzwxh:16908klzzwxh:16909klzzwxh:16910klzzwxh:16911klzzwxh:16912klzzwxh:16913klzzwxh:16914 try klzzwxh:16402klzzwxh:17681klzzwxh:16915klzzwxh:16916klzzwxh:16917klzzwxh:16918klzzwxh:16919klzzwxh:16920klzzwxh:16921klzzwxh:16922klzzwxh:16923klzzwxh:16924klzzwxh:16925klzzwxh:16926klzzwxh:16927klzzwxh:16928klzzwxh:16929klzzwxh:16930klzzwxh:16931klzzwxh:16932klzzwxh:16933 resource.rollbackklzzwxh:16403klzzwxh:16404;klzzwxh:17682klzzwxh:16934klzzwxh:16935klzzwxh:16936klzzwxh:16937klzzwxh:16938klzzwxh:16939klzzwxh:16940klzzwxh:16941klzzwxh:16942klzzwxh:16943klzzwxh:16944klzzwxh:16945klzzwxh:16946klzzwxh:16947klzzwxh:16948klzzwxh:16949klzzwxh:16950klzzwxh:16951klzzwxh:16952 // Initially we're readonly so we switch to rollback.klzzwxh:17683klzzwxh:16953klzzwxh:16954klzzwxh:16955klzzwxh:16956klzzwxh:16957klzzwxh:16958klzzwxh:16959klzzwxh:16960klzzwxh:16961klzzwxh:16962klzzwxh:16963klzzwxh:16964klzzwxh:16965klzzwxh:16966klzzwxh:16967klzzwxh:16968klzzwxh:16969klzzwxh:16970klzzwxh:16971 // If we happen to be in commit, we switch to mixed.klzzwxh:17684klzzwxh:16972klzzwxh:16973klzzwxh:16974klzzwxh:16975klzzwxh:16976klzzwxh:16977klzzwxh:16978klzzwxh:16979klzzwxh:16980klzzwxh:16981klzzwxh:16982klzzwxh:16983klzzwxh:16984klzzwxh:16985klzzwxh:16986klzzwxh:16987klzzwxh:16988klzzwxh:16989klzzwxh:16990 klzzwxh:16405heuristic = klzzwxh:16406heuristic | Heuristic.ROLLBACK;klzzwxh:17685klzzwxh:16991klzzwxh:16992klzzwxh:16993klzzwxh:16994klzzwxh:16995klzzwxh:16996klzzwxh:16997klzzwxh:16998klzzwxh:16999klzzwxh:17000klzzwxh:17001klzzwxh:17002klzzwxh:17003klzzwxh:17004klzzwxh:17005klzzwxh:17006klzzwxh:17007klzzwxh:17008klzzwxh:17009 klzzwxh:16407resourcesklzzwxh:16408 i klzzwxh:16409 = null;klzzwxh:17686klzzwxh:17010klzzwxh:17011klzzwxh:17012klzzwxh:17013klzzwxh:17014klzzwxh:17015klzzwxh:17016klzzwxh:17017klzzwxh:17018klzzwxh:17019klzzwxh:17020klzzwxh:17021klzzwxh:17022klzzwxh:17023klzzwxh:17024 klzzwxh:16410 catch klzzwxh:16411 HeuristicMixed except klzzwxh:16412 klzzwxh:16413klzzwxh:17687klzzwxh:17025klzzwxh:17026klzzwxh:17027klzzwxh:17028klzzwxh:17029klzzwxh:17030klzzwxh:17031klzzwxh:17032klzzwxh:17033klzzwxh:17034klzzwxh:17035klzzwxh:17036klzzwxh:17037klzzwxh:17038klzzwxh:17039klzzwxh:17040klzzwxh:17041klzzwxh:17042klzzwxh:17043 klzzwxh:16414heuristic = klzzwxh:16415heuristic | Heuristic.MIXED;klzzwxh:17688klzzwxh:17044klzzwxh:17045klzzwxh:17046klzzwxh:17047klzzwxh:17048klzzwxh:17049klzzwxh:17050klzzwxh:17051klzzwxh:17052klzzwxh:17053klzzwxh:17054klzzwxh:17055klzzwxh:17056klzzwxh:17057klzzwxh:17058 klzzwxh:16416 catch klzzwxh:16417 HeuristicHazard except klzzwxh:16418 klzzwxh:16419klzzwxh:17689klzzwxh:17059klzzwxh:17060klzzwxh:17061klzzwxh:17062klzzwxh:17063klzzwxh:17064klzzwxh:17065klzzwxh:17066klzzwxh:17067klzzwxh:17068klzzwxh:17069klzzwxh:17070klzzwxh:17071klzzwxh:17072klzzwxh:17073klzzwxh:17074klzzwxh:17075klzzwxh:17076klzzwxh:17077 klzzwxh:16420heuristic = klzzwxh:16421heuristic | Heuristic.HAZARD;klzzwxh:17690klzzwxh:17078klzzwxh:17079klzzwxh:17080klzzwxh:17081klzzwxh:17082klzzwxh:17083klzzwxh:17084klzzwxh:17085klzzwxh:17086klzzwxh:17087klzzwxh:17088klzzwxh:17089klzzwxh:17090klzzwxh:17091klzzwxh:17092 klzzwxh:16422 catch klzzwxh:16423 HeuristicCommit except klzzwxh:16424 klzzwxh:16425klzzwxh:17691klzzwxh:17093klzzwxh:17094klzzwxh:17095klzzwxh:17096klzzwxh:17097klzzwxh:17098klzzwxh:17099klzzwxh:17100klzzwxh:17101klzzwxh:17102klzzwxh:17103klzzwxh:17104klzzwxh:17105klzzwxh:17106klzzwxh:17107klzzwxh:17108klzzwxh:17109klzzwxh:17110klzzwxh:17111 klzzwxh:16426heuristic = klzzwxh:16427heuristic | Heuristic.COMMIT;klzzwxh:17692klzzwxh:17112klzzwxh:17113klzzwxh:17114klzzwxh:17115klzzwxh:17116klzzwxh:17117klzzwxh:17118klzzwxh:17119klzzwxh:17120klzzwxh:17121klzzwxh:17122klzzwxh:17123klzzwxh:17124klzzwxh:17125klzzwxh:17126 klzzwxh:16428 catch klzzwxh:16429 Exception except klzzwxh:16430 klzzwxh:16431klzzwxh:17693klzzwxh:17127klzzwxh:17128klzzwxh:17129klzzwxh:17130klzzwxh:17131klzzwxh:17132klzzwxh:17133klzzwxh:17134klzzwxh:17135klzzwxh:17136klzzwxh:17137klzzwxh:17138klzzwxh:17139klzzwxh:17140klzzwxh:17141klzzwxh:17142klzzwxh:17143klzzwxh:17144klzzwxh:17145 klzzwxh:16432heuristic = klzzwxh:16433heuristic | Heuristic.HAZARD;klzzwxh:17694klzzwxh:17146klzzwxh:17147klzzwxh:17148klzzwxh:17149klzzwxh:17150klzzwxh:17151klzzwxh:17152klzzwxh:17153klzzwxh:17154klzzwxh:17155klzzwxh:17156klzzwxh:17157klzzwxh:17158klzzwxh:17159klzzwxh:17160klzzwxh:17161klzzwxh:17162klzzwxh:17163klzzwxh:17164 errorklzzwxh:16434 except klzzwxh:16435;klzzwxh:17695klzzwxh:17165klzzwxh:17166klzzwxh:17167klzzwxh:17168klzzwxh:17169klzzwxh:17170klzzwxh:17171klzzwxh:17172klzzwxh:17173klzzwxh:17174klzzwxh:17175klzzwxh:17176klzzwxh:17177klzzwxh:17178klzzwxh:17179 klzzwxh:16436klzzwxh:17696klzzwxh:17180klzzwxh:17181klzzwxh:17182klzzwxh:17183klzzwxh:17184klzzwxh:17185klzzwxh:17186klzzwxh:17187klzzwxh:17188klzzwxh:17189klzzwxh:17190 klzzwxh:16437klzzwxh:17697klzzwxh:17191klzzwxh:17192klzzwxh:17193klzzwxh:17194klzzwxh:17195klzzwxh:17196klzzwxh:17197 klzzwxh:16438klzzwxh:17698klzzwxh:17198klzzwxh:17199klzzwxh:17200klzzwxh:17201klzzwxh:17202klzzwxh:17203klzzwxh:17204 klzzwxh:17699klzzwxh:17205klzzwxh:17206klzzwxh:17207klzzwxh:17208klzzwxh:17209klzzwxh:17210klzzwxh:17211 resHolder = klzzwxh:16439enlisted;klzzwxh:17700klzzwxh:17212klzzwxh:17213klzzwxh:17214klzzwxh:17215klzzwxh:17216klzzwxh:17217klzzwxh:17218 if klzzwxh:16440 resHolder klzzwxh:16441= null klzzwxh:16442 klzzwxh:16443klzzwxh:17701klzzwxh:17219klzzwxh:17220klzzwxh:17221klzzwxh:17222klzzwxh:17223klzzwxh:17224klzzwxh:17225klzzwxh:17226klzzwxh:17227klzzwxh:17228klzzwxh:17229 while klzzwxh:16444 resHolder klzzwxh:16445= null klzzwxh:16446 klzzwxh:16447klzzwxh:17702klzzwxh:17230klzzwxh:17231klzzwxh:17232klzzwxh:17233klzzwxh:17234klzzwxh:17235klzzwxh:17236klzzwxh:17237klzzwxh:17238klzzwxh:17239klzzwxh:17240klzzwxh:17241klzzwxh:17242klzzwxh:17243klzzwxh:17244 try klzzwxh:16448klzzwxh:17703klzzwxh:17245klzzwxh:17246klzzwxh:17247klzzwxh:17248klzzwxh:17249klzzwxh:17250klzzwxh:17251klzzwxh:17252klzzwxh:17253klzzwxh:17254klzzwxh:17255klzzwxh:17256klzzwxh:17257klzzwxh:17258klzzwxh:17259klzzwxh:17260klzzwxh:17261klzzwxh:17262klzzwxh:17263 endForTransactionBoundaryklzzwxh:16449 resHolder klzzwxh:16450;klzzwxh:17704klzzwxh:17264klzzwxh:17265klzzwxh:17266klzzwxh:17267klzzwxh:17268klzzwxh:17269klzzwxh:17270klzzwxh:17271klzzwxh:17272klzzwxh:17273klzzwxh:17274klzzwxh:17275klzzwxh:17276klzzwxh:17277klzzwxh:17278 klzzwxh:16451 catch klzzwxh:16452 XAException except klzzwxh:16453 klzzwxh:16454klzzwxh:17705klzzwxh:17279klzzwxh:17280klzzwxh:17281klzzwxh:17282klzzwxh:17283klzzwxh:17284klzzwxh:17285klzzwxh:17286klzzwxh:17287klzzwxh:17288klzzwxh:17289klzzwxh:17290klzzwxh:17291klzzwxh:17292klzzwxh:17293klzzwxh:17294klzzwxh:17295klzzwxh:17296klzzwxh:17297 xaErrorklzzwxh:16455 resHolder, except klzzwxh:16456;klzzwxh:17706klzzwxh:17298klzzwxh:17299klzzwxh:17300klzzwxh:17301klzzwxh:17302klzzwxh:17303klzzwxh:17304klzzwxh:17305klzzwxh:17306klzzwxh:17307klzzwxh:17308klzzwxh:17309klzzwxh:17310klzzwxh:17311klzzwxh:17312 klzzwxh:16457 catch klzzwxh:16458 Exception except klzzwxh:16459 klzzwxh:16460klzzwxh:17707klzzwxh:17313klzzwxh:17314klzzwxh:17315klzzwxh:17316klzzwxh:17317klzzwxh:17318klzzwxh:17319klzzwxh:17320klzzwxh:17321klzzwxh:17322klzzwxh:17323klzzwxh:17324klzzwxh:17325klzzwxh:17326klzzwxh:17327klzzwxh:17328klzzwxh:17329klzzwxh:17330klzzwxh:17331 klzzwxh:16461heuristic = klzzwxh:16462heuristic | Heuristic.HAZARD;klzzwxh:17708klzzwxh:17332klzzwxh:17333klzzwxh:17334klzzwxh:17335klzzwxh:17336klzzwxh:17337klzzwxh:17338klzzwxh:17339klzzwxh:17340klzzwxh:17341klzzwxh:17342klzzwxh:17343klzzwxh:17344klzzwxh:17345klzzwxh:17346klzzwxh:17347klzzwxh:17348klzzwxh:17349klzzwxh:17350 errorklzzwxh:16463 except klzzwxh:16464;klzzwxh:17709klzzwxh:17351klzzwxh:17352klzzwxh:17353klzzwxh:17354klzzwxh:17355klzzwxh:17356klzzwxh:17357klzzwxh:17358klzzwxh:17359klzzwxh:17360klzzwxh:17361klzzwxh:17362klzzwxh:17363klzzwxh:17364klzzwxh:17365 klzzwxh:16465klzzwxh:17710klzzwxh:17366klzzwxh:17367klzzwxh:17368klzzwxh:17369klzzwxh:17370klzzwxh:17371klzzwxh:17372klzzwxh:17373klzzwxh:17374klzzwxh:17375klzzwxh:17376klzzwxh:17377klzzwxh:17378klzzwxh:17379klzzwxh:17380 resHolder = resHolder.klzzwxh:16466nextHolder;klzzwxh:17711klzzwxh:17381klzzwxh:17382klzzwxh:17383klzzwxh:17384klzzwxh:17385klzzwxh:17386klzzwxh:17387klzzwxh:17388klzzwxh:17389klzzwxh:17390klzzwxh:17391 klzzwxh:16467klzzwxh:17712klzzwxh:17392klzzwxh:17393klzzwxh:17394klzzwxh:17395klzzwxh:17396klzzwxh:17397klzzwxh:17398klzzwxh:17399klzzwxh:17400klzzwxh:17401klzzwxh:17402 rollbackXAResourcesklzzwxh:16468 klzzwxh:16469enlisted klzzwxh:16470;klzzwxh:17713klzzwxh:17403klzzwxh:17404klzzwxh:17405klzzwxh:17406klzzwxh:17407klzzwxh:17408klzzwxh:17409 klzzwxh:16471klzzwxh:17714klzzwxh:17410klzzwxh:17411klzzwxh:17412klzzwxh:17413klzzwxh:17414klzzwxh:17415klzzwxh:17416 klzzwxh:17715klzzwxh:17417klzzwxh:17418klzzwxh:17419klzzwxh:17420klzzwxh:17421klzzwxh:17422klzzwxh:17423 if klzzwxh:16472 klzzwxh:16473delisted klzzwxh:16474= nullklzzwxh:16475klzzwxh:17716klzzwxh:17424klzzwxh:17425klzzwxh:17426klzzwxh:17427klzzwxh:17428klzzwxh:17429klzzwxh:17430klzzwxh:17431klzzwxh:17432klzzwxh:17433klzzwxh:17434 rollbackXAResourcesklzzwxh:16476 klzzwxh:16477delisted klzzwxh:16478;klzzwxh:17717klzzwxh:17435klzzwxh:17436klzzwxh:17437klzzwxh:17438klzzwxh:17439klzzwxh:17440klzzwxh:17441 klzzwxh:17718klzzwxh:17442klzzwxh:17443klzzwxh:17444klzzwxh:17445klzzwxh:17446klzzwxh:17447klzzwxh:17448 klzzwxh:16479status = STATUSklzzwxh:16480ROLLEDBACK;klzzwxh:17719klzzwxh:17449klzzwxh:17450klzzwxh:17451klzzwxh:17452klzzwxh:17453klzzwxh:17454klzzwxh:17455 klzzwxh:16481heuristic = normalizeklzzwxh:16482 klzzwxh:16483heuristic klzzwxh:16484;klzzwxh:17720klzzwxh:17456klzzwxh:17457klzzwxh:17458klzzwxh:17459klzzwxh:17460klzzwxh:17461klzzwxh:17462 klzzwxh:16485txDomain.notifyCompletionklzzwxh:16486 this, klzzwxh:16487heuristic klzzwxh:16488;klzzwxh:17721klzzwxh:17463klzzwxh:17464klzzwxh:17465klzzwxh:17466klzzwxh:17467klzzwxh:17468klzzwxh:17469 klzzwxh:17722klzzwxh:17470klzzwxh:17471klzzwxh:17472klzzwxh:17473klzzwxh:17474klzzwxh:17475klzzwxh:17476 // We record the transaction only if two-phase commit,klzzwxh:17723klzzwxh:17477klzzwxh:17478klzzwxh:17479klzzwxh:17480klzzwxh:17481klzzwxh:17482klzzwxh:17483 // or we didn't expect the heuristic decision, orklzzwxh:17724klzzwxh:17484klzzwxh:17485klzzwxh:17486klzzwxh:17487klzzwxh:17488klzzwxh:17489klzzwxh:17490 // the transaction has timed out.klzzwxh:17725klzzwxh:17491klzzwxh:17492klzzwxh:17493klzzwxh:17494klzzwxh:17495klzzwxh:17496klzzwxh:17497 if klzzwxh:16489 klzzwxh:16490txDomain.klzzwxh:16491journal klzzwxh:16492= null klzzwxh:16493 klzzwxh:16494klzzwxh:17726klzzwxh:17498klzzwxh:17499klzzwxh:17500klzzwxh:17501klzzwxh:17502klzzwxh:17503klzzwxh:17504klzzwxh:17505klzzwxh:17506klzzwxh:17507klzzwxh:17508 if klzzwxh:16495 klzzwxh:16496timedOut || klzzwxh:16497heuristic klzzwxh:16498= Heuristic.ROLLBACK klzzwxh:16499klzzwxh:17727klzzwxh:17509klzzwxh:17510klzzwxh:17511klzzwxh:17512klzzwxh:17513klzzwxh:17514klzzwxh:17515klzzwxh:17516klzzwxh:17517klzzwxh:17518klzzwxh:17519klzzwxh:17520klzzwxh:17521klzzwxh:17522klzzwxh:17523 klzzwxh:16500twoPhase = true;klzzwxh:17728klzzwxh:17524klzzwxh:17525klzzwxh:17526klzzwxh:17527klzzwxh:17528klzzwxh:17529klzzwxh:17530klzzwxh:17531klzzwxh:17532klzzwxh:17533klzzwxh:17534 if klzzwxh:16501 klzzwxh:16502twoPhase klzzwxh:16503 klzzwxh:16504klzzwxh:17729klzzwxh:17535klzzwxh:17536klzzwxh:17537klzzwxh:17538klzzwxh:17539klzzwxh:17540klzzwxh:17541klzzwxh:17542klzzwxh:17543klzzwxh:17544klzzwxh:17545klzzwxh:17546klzzwxh:17547klzzwxh:17548klzzwxh:17549 try klzzwxh:16505klzzwxh:17730klzzwxh:17550klzzwxh:17551klzzwxh:17552klzzwxh:17553klzzwxh:17554klzzwxh:17555klzzwxh:17556klzzwxh:17557klzzwxh:17558klzzwxh:17559klzzwxh:17560klzzwxh:17561klzzwxh:17562klzzwxh:17563klzzwxh:17564klzzwxh:17565klzzwxh:17566klzzwxh:17567klzzwxh:17568 klzzwxh:16506txDomain.klzzwxh:16507journal.rollbackklzzwxh:16508 klzzwxh:16509xid klzzwxh:16510;klzzwxh:17731klzzwxh:17569klzzwxh:17570klzzwxh:17571klzzwxh:17572klzzwxh:17573klzzwxh:17574klzzwxh:17575klzzwxh:17576klzzwxh:17577klzzwxh:17578klzzwxh:17579klzzwxh:17580klzzwxh:17581klzzwxh:17582klzzwxh:17583 klzzwxh:16511 catch klzzwxh:16512 SystemException except klzzwxh:16513 klzzwxh:16514klzzwxh:17732klzzwxh:17584klzzwxh:17585klzzwxh:17586klzzwxh:17587klzzwxh:17588klzzwxh:17589klzzwxh:17590klzzwxh:17591klzzwxh:17592klzzwxh:17593klzzwxh:17594klzzwxh:17595klzzwxh:17596klzzwxh:17597klzzwxh:17598klzzwxh:17599klzzwxh:17600klzzwxh:17601klzzwxh:17602 errorklzzwxh:16515 except klzzwxh:16516;klzzwxh:17733klzzwxh:17603klzzwxh:17604klzzwxh:17605klzzwxh:17606klzzwxh:17607klzzwxh:17608klzzwxh:17609klzzwxh:17610klzzwxh:17611klzzwxh:17612klzzwxh:17613klzzwxh:17614klzzwxh:17615klzzwxh:17616klzzwxh:17617 klzzwxh:16517klzzwxh:17734klzzwxh:17618klzzwxh:17619klzzwxh:17620klzzwxh:17621klzzwxh:17622klzzwxh:17623klzzwxh:17624klzzwxh:17625klzzwxh:17626klzzwxh:17627klzzwxh:17628 klzzwxh:16518klzzwxh:17735klzzwxh:17629klzzwxh:17630klzzwxh:17631klzzwxh:17632klzzwxh:17633klzzwxh:17634klzzwxh:17635 klzzwxh:16519klzzwxh:17736klzzwxh:17636klzzwxh:17637klzzwxh:17638 klzzwxh:16520

klzzwxh:17772klzzwxh:17773klzzwxh:17774 /klzzwxh:17737klzzwxh:17738klzzwxh:17977klzzwxh:17775klzzwxh:17776klzzwxh:17777klzzwxh:17778 klzzwxh:17739 Suspend the resources associated with the transaction.klzzwxh:17978klzzwxh:17779klzzwxh:17780klzzwxh:17781klzzwxh:17782 klzzwxh:17740 klzzwxh:17783Pklzzwxh:17784klzzwxh:17979klzzwxh:17785klzzwxh:17786klzzwxh:17787klzzwxh:17788 klzzwxh:17741 The resources that are already suspended are not affected.klzzwxh:17980klzzwxh:17789klzzwxh:17790klzzwxh:17791klzzwxh:17792 klzzwxh:17742/klzzwxh:17981klzzwxh:17793klzzwxh:17794klzzwxh:17795 protected synchronized void suspendResourcesklzzwxh:17743klzzwxh:17744klzzwxh:17982klzzwxh:17796klzzwxh:17797klzzwxh:17798klzzwxh:17799klzzwxh:17800klzzwxh:17801klzzwxh:17802 throws IllegalStateException, SystemExceptionklzzwxh:17983klzzwxh:17803klzzwxh:17804klzzwxh:17805 klzzwxh:17745klzzwxh:17984klzzwxh:17806klzzwxh:17807klzzwxh:17808klzzwxh:17809klzzwxh:17810klzzwxh:17811klzzwxh:17812 InternalXAResourceHolder resHolder;klzzwxh:17985klzzwxh:17813klzzwxh:17814klzzwxh:17815klzzwxh:17816klzzwxh:17817klzzwxh:17818klzzwxh:17819 klzzwxh:17986klzzwxh:17820klzzwxh:17821klzzwxh:17822klzzwxh:17823klzzwxh:17824klzzwxh:17825klzzwxh:17826 // Check the status of the transaction and act accordingly.klzzwxh:17987klzzwxh:17827klzzwxh:17828klzzwxh:17829klzzwxh:17830klzzwxh:17831klzzwxh:17832klzzwxh:17833 switch klzzwxh:17746 klzzwxh:17747status klzzwxh:17748 klzzwxh:17749klzzwxh:17988klzzwxh:17834klzzwxh:17835klzzwxh:17836klzzwxh:17837klzzwxh:17838klzzwxh:17839klzzwxh:17840 case STATUSklzzwxh:17750ACTIVE:klzzwxh:17989klzzwxh:17841klzzwxh:17842klzzwxh:17843klzzwxh:17844klzzwxh:17845klzzwxh:17846klzzwxh:17847 case STATUSklzzwxh:17751MARKEDklzzwxh:17752ROLLBACK:klzzwxh:17990klzzwxh:17848klzzwxh:17849klzzwxh:17850klzzwxh:17851klzzwxh:17852klzzwxh:17853klzzwxh:17854klzzwxh:17855klzzwxh:17856klzzwxh:17857klzzwxh:17858 // Transaction is active, we can suspend resources.klzzwxh:17991klzzwxh:17859klzzwxh:17860klzzwxh:17861klzzwxh:17862klzzwxh:17863klzzwxh:17864klzzwxh:17865klzzwxh:17866klzzwxh:17867klzzwxh:17868klzzwxh:17869 break;klzzwxh:17992klzzwxh:17870klzzwxh:17871klzzwxh:17872klzzwxh:17873klzzwxh:17874klzzwxh:17875klzzwxh:17876 case STATUSklzzwxh:17753PREPARED:klzzwxh:17993klzzwxh:17877klzzwxh:17878klzzwxh:17879klzzwxh:17880klzzwxh:17881klzzwxh:17882klzzwxh:17883 case STATUSklzzwxh:17754PREPARING:klzzwxh:17994klzzwxh:17884klzzwxh:17885klzzwxh:17886klzzwxh:17887klzzwxh:17888klzzwxh:17889klzzwxh:17890 case STATUSklzzwxh:17755COMMITTING:klzzwxh:17995klzzwxh:17891klzzwxh:17892klzzwxh:17893klzzwxh:17894klzzwxh:17895klzzwxh:17896klzzwxh:17897klzzwxh:17898klzzwxh:17899klzzwxh:17900klzzwxh:17901 // Transaction is preparing, cannot suspend resource.klzzwxh:17996klzzwxh:17902klzzwxh:17903klzzwxh:17904klzzwxh:17905klzzwxh:17906klzzwxh:17907klzzwxh:17908klzzwxh:17909klzzwxh:17910klzzwxh:17911klzzwxh:17912 throw new IllegalStateExceptionklzzwxh:17756 Messages.messageklzzwxh:17757 klzzwxh:17913tyrex.tx.inCommitklzzwxh:17914 klzzwxh:17758 klzzwxh:17759;klzzwxh:17997klzzwxh:17915klzzwxh:17916klzzwxh:17917klzzwxh:17918klzzwxh:17919klzzwxh:17920klzzwxh:17921 case STATUSklzzwxh:17760ROLLEDBACK:klzzwxh:17998klzzwxh:17922klzzwxh:17923klzzwxh:17924klzzwxh:17925klzzwxh:17926klzzwxh:17927klzzwxh:17928 case STATUSklzzwxh:17761ROLLINGklzzwxh:17762BACK:klzzwxh:17999klzzwxh:17929klzzwxh:17930klzzwxh:17931klzzwxh:17932klzzwxh:17933klzzwxh:17934klzzwxh:17935 case STATUSklzzwxh:17763COMMITTED:klzzwxh:18000klzzwxh:17936klzzwxh:17937klzzwxh:17938klzzwxh:17939klzzwxh:17940klzzwxh:17941klzzwxh:17942 case STATUSklzzwxh:17764NOklzzwxh:17765TRANSACTION:klzzwxh:18001klzzwxh:17943klzzwxh:17944klzzwxh:17945klzzwxh:17946klzzwxh:17947klzzwxh:17948klzzwxh:17949 case STATUSklzzwxh:17766UNKNOWN:klzzwxh:18002klzzwxh:17950klzzwxh:17951klzzwxh:17952klzzwxh:17953klzzwxh:17954klzzwxh:17955klzzwxh:17956 default:klzzwxh:18003klzzwxh:17957klzzwxh:17958klzzwxh:17959klzzwxh:17960klzzwxh:17961klzzwxh:17962klzzwxh:17963klzzwxh:17964klzzwxh:17965klzzwxh:17966klzzwxh:17967 throw new IllegalStateExceptionklzzwxh:17767 Messages.messageklzzwxh:17768 klzzwxh:17968tyrex.tx.inactiveklzzwxh:17969 klzzwxh:17769 klzzwxh:17770;klzzwxh:18004klzzwxh:17970klzzwxh:17971klzzwxh:17972klzzwxh:17973klzzwxh:17974klzzwxh:17975klzzwxh:17976 klzzwxh:17771

klzzwxh:18021klzzwxh:18022klzzwxh:18023klzzwxh:18024klzzwxh:18025klzzwxh:18026klzzwxh:18027 ThreadContextklzzwxh:18028klzzwxh:18029 context;klzzwxh:18141klzzwxh:18030klzzwxh:18031klzzwxh:18032klzzwxh:18033klzzwxh:18034klzzwxh:18035klzzwxh:18036 context = ThreadContext.getThreadContextklzzwxh:18005klzzwxh:18006;klzzwxh:18142klzzwxh:18037klzzwxh:18038klzzwxh:18039klzzwxh:18040klzzwxh:18041klzzwxh:18042klzzwxh:18043 XAResourceHolderklzzwxh:18007klzzwxh:18008 ctxXaResHolders =klzzwxh:18044klzzwxh:18045klzzwxh:18046 context.getXAResourceHoldersklzzwxh:18009klzzwxh:18010;klzzwxh:18143klzzwxh:18047klzzwxh:18048klzzwxh:18049klzzwxh:18050klzzwxh:18051klzzwxh:18052klzzwxh:18053 klzzwxh:18144klzzwxh:18054klzzwxh:18055klzzwxh:18056klzzwxh:18057klzzwxh:18058klzzwxh:18059klzzwxh:18060 // Look up the enlisted resource. If the resource is notklzzwxh:18145klzzwxh:18061klzzwxh:18062klzzwxh:18063klzzwxh:18064klzzwxh:18065klzzwxh:18066klzzwxh:18067 // enlisted, return false.klzzwxh:18146klzzwxh:18068klzzwxh:18069klzzwxh:18070klzzwxh:18071klzzwxh:18072klzzwxh:18073klzzwxh:18074 resHolder = klzzwxh:18011enlisted;klzzwxh:18147klzzwxh:18075klzzwxh:18076klzzwxh:18077klzzwxh:18078klzzwxh:18079klzzwxh:18080klzzwxh:18081 while klzzwxh:18012 resHolder klzzwxh:18013= null klzzwxh:18014 klzzwxh:18015klzzwxh:18148klzzwxh:18082klzzwxh:18083klzzwxh:18084klzzwxh:18085klzzwxh:18086klzzwxh:18087klzzwxh:18088klzzwxh:18089klzzwxh:18090klzzwxh:18091klzzwxh:18092 // we simply suspend it. The resource will be resumed when weklzzwxh:18149klzzwxh:18093klzzwxh:18094klzzwxh:18095klzzwxh:18096klzzwxh:18097klzzwxh:18098klzzwxh:18099klzzwxh:18100klzzwxh:18101klzzwxh:18102klzzwxh:18103 // commit/rollback, i.e. it's not removed from theklzzwxh:18150klzzwxh:18104klzzwxh:18105klzzwxh:18106klzzwxh:18107klzzwxh:18108klzzwxh:18109klzzwxh:18110klzzwxh:18111klzzwxh:18112klzzwxh:18113klzzwxh:18114 // list of enlisted resources.klzzwxh:18151klzzwxh:18115klzzwxh:18116klzzwxh:18117klzzwxh:18118klzzwxh:18119klzzwxh:18120klzzwxh:18121klzzwxh:18122klzzwxh:18123klzzwxh:18124klzzwxh:18125 if klzzwxh:18016 resHolder.klzzwxh:18017endFlag == XAResource.TMNOFLAGS klzzwxh:18018 klzzwxh:18019klzzwxh:18152klzzwxh:18126klzzwxh:18127klzzwxh:18128klzzwxh:18129klzzwxh:18130klzzwxh:18131klzzwxh:18132klzzwxh:18133klzzwxh:18134klzzwxh:18135klzzwxh:18136klzzwxh:18137klzzwxh:18138klzzwxh:18139klzzwxh:18140 try klzzwxh:18020

klzzwxh:18169klzzwxh:18170klzzwxh:18171klzzwxh:18172klzzwxh:18173klzzwxh:18174klzzwxh:18175klzzwxh:18176klzzwxh:18177klzzwxh:18178klzzwxh:18179klzzwxh:18180klzzwxh:18181klzzwxh:18182klzzwxh:18183klzzwxh:18184klzzwxh:18185klzzwxh:18186klzzwxh:18187 for klzzwxh:18153int j =0;j klzzwxh:18188 ctxXaResHolders.length ; j++klzzwxh:18154klzzwxh:18331klzzwxh:18189klzzwxh:18190klzzwxh:18191klzzwxh:18192klzzwxh:18193klzzwxh:18194klzzwxh:18195klzzwxh:18196klzzwxh:18197klzzwxh:18198klzzwxh:18199klzzwxh:18200klzzwxh:18201klzzwxh:18202klzzwxh:18203klzzwxh:18204klzzwxh:18205klzzwxh:18206klzzwxh:18207 klzzwxh:18155klzzwxh:18332klzzwxh:18208klzzwxh:18209klzzwxh:18210klzzwxh:18211klzzwxh:18212klzzwxh:18213klzzwxh:18214klzzwxh:18215klzzwxh:18216klzzwxh:18217klzzwxh:18218klzzwxh:18219klzzwxh:18220klzzwxh:18221klzzwxh:18222klzzwxh:18223klzzwxh:18224klzzwxh:18225klzzwxh:18226klzzwxh:18227klzzwxh:18228klzzwxh:18229klzzwxh:18230 if klzzwxh:18156ctxXaResHoldersklzzwxh:18157jklzzwxh:18158.klzzwxh:18159xaResource == resHolder.klzzwxh:18160xaResourceklzzwxh:18161klzzwxh:18333klzzwxh:18231klzzwxh:18232klzzwxh:18233klzzwxh:18234klzzwxh:18235klzzwxh:18236klzzwxh:18237klzzwxh:18238klzzwxh:18239klzzwxh:18240klzzwxh:18241klzzwxh:18242klzzwxh:18243klzzwxh:18244klzzwxh:18245klzzwxh:18246klzzwxh:18247klzzwxh:18248klzzwxh:18249klzzwxh:18250klzzwxh:18251klzzwxh:18252klzzwxh:18253 klzzwxh:18162klzzwxh:18334klzzwxh:18254klzzwxh:18255klzzwxh:18256klzzwxh:18257klzzwxh:18258klzzwxh:18259klzzwxh:18260klzzwxh:18261klzzwxh:18262klzzwxh:18263klzzwxh:18264klzzwxh:18265klzzwxh:18266klzzwxh:18267klzzwxh:18268klzzwxh:18269klzzwxh:18270klzzwxh:18271klzzwxh:18272klzzwxh:18273klzzwxh:18274klzzwxh:18275klzzwxh:18276klzzwxh:18277klzzwxh:18278klzzwxh:18279klzzwxh:18280 resHolder.klzzwxh:18163xaResource.endklzzwxh:18164 resHolder.klzzwxh:18165xid, XAResource.TMSUSPEND klzzwxh:18166;klzzwxh:18335klzzwxh:18281klzzwxh:18282klzzwxh:18283klzzwxh:18284klzzwxh:18285klzzwxh:18286klzzwxh:18287klzzwxh:18288klzzwxh:18289klzzwxh:18290klzzwxh:18291klzzwxh:18292klzzwxh:18293klzzwxh:18294klzzwxh:18295klzzwxh:18296klzzwxh:18297klzzwxh:18298klzzwxh:18299klzzwxh:18300klzzwxh:18301klzzwxh:18302klzzwxh:18303klzzwxh:18304klzzwxh:18305klzzwxh:18306klzzwxh:18307 resHolder.klzzwxh:18167endFlag = XAResource.TMSUSPEND;klzzwxh:18336klzzwxh:18308klzzwxh:18309klzzwxh:18310klzzwxh:18311klzzwxh:18312klzzwxh:18313klzzwxh:18314klzzwxh:18315klzzwxh:18316klzzwxh:18317klzzwxh:18318klzzwxh:18319klzzwxh:18320klzzwxh:18321klzzwxh:18322klzzwxh:18323klzzwxh:18324klzzwxh:18325klzzwxh:18326klzzwxh:18327klzzwxh:18328klzzwxh:18329klzzwxh:18330 klzzwxh:18168

klzzwxh:18357klzzwxh:18358klzzwxh:18359klzzwxh:18360klzzwxh:18361klzzwxh:18362klzzwxh:18363klzzwxh:18364klzzwxh:18365klzzwxh:18366klzzwxh:18367klzzwxh:18368klzzwxh:18369klzzwxh:18370klzzwxh:18371klzzwxh:18372klzzwxh:18373klzzwxh:18374klzzwxh:18375 klzzwxh:18337klzzwxh:18510klzzwxh:18376klzzwxh:18377klzzwxh:18378klzzwxh:18379klzzwxh:18380klzzwxh:18381klzzwxh:18382klzzwxh:18383klzzwxh:18384klzzwxh:18385klzzwxh:18386klzzwxh:18387klzzwxh:18388klzzwxh:18389klzzwxh:18390 klzzwxh:18338 catch klzzwxh:18339 XAException except klzzwxh:18340 klzzwxh:18341klzzwxh:18511klzzwxh:18391klzzwxh:18392klzzwxh:18393klzzwxh:18394klzzwxh:18395klzzwxh:18396klzzwxh:18397klzzwxh:18398klzzwxh:18399klzzwxh:18400klzzwxh:18401klzzwxh:18402klzzwxh:18403klzzwxh:18404klzzwxh:18405klzzwxh:18406klzzwxh:18407klzzwxh:18408klzzwxh:18409 xaErrorklzzwxh:18342 resHolder, except klzzwxh:18343;klzzwxh:18512klzzwxh:18410klzzwxh:18411klzzwxh:18412klzzwxh:18413klzzwxh:18414klzzwxh:18415klzzwxh:18416klzzwxh:18417klzzwxh:18418klzzwxh:18419klzzwxh:18420klzzwxh:18421klzzwxh:18422klzzwxh:18423klzzwxh:18424klzzwxh:18425klzzwxh:18426klzzwxh:18427klzzwxh:18428 throw new NestedSystemExceptionklzzwxh:18344 except klzzwxh:18345;klzzwxh:18513klzzwxh:18429klzzwxh:18430klzzwxh:18431klzzwxh:18432klzzwxh:18433klzzwxh:18434klzzwxh:18435klzzwxh:18436klzzwxh:18437klzzwxh:18438klzzwxh:18439klzzwxh:18440klzzwxh:18441klzzwxh:18442klzzwxh:18443 klzzwxh:18346 catch klzzwxh:18347 Exception except klzzwxh:18348 klzzwxh:18349klzzwxh:18514klzzwxh:18444klzzwxh:18445klzzwxh:18446klzzwxh:18447klzzwxh:18448klzzwxh:18449klzzwxh:18450klzzwxh:18451klzzwxh:18452klzzwxh:18453klzzwxh:18454klzzwxh:18455klzzwxh:18456klzzwxh:18457klzzwxh:18458klzzwxh:18459klzzwxh:18460klzzwxh:18461klzzwxh:18462 throw new NestedSystemExceptionklzzwxh:18350 except klzzwxh:18351;klzzwxh:18515klzzwxh:18463klzzwxh:18464klzzwxh:18465klzzwxh:18466klzzwxh:18467klzzwxh:18468klzzwxh:18469klzzwxh:18470klzzwxh:18471klzzwxh:18472klzzwxh:18473klzzwxh:18474klzzwxh:18475klzzwxh:18476klzzwxh:18477 klzzwxh:18352klzzwxh:18516klzzwxh:18478klzzwxh:18479klzzwxh:18480klzzwxh:18481klzzwxh:18482klzzwxh:18483klzzwxh:18484klzzwxh:18485klzzwxh:18486klzzwxh:18487klzzwxh:18488 klzzwxh:18353klzzwxh:18517klzzwxh:18489klzzwxh:18490klzzwxh:18491klzzwxh:18492klzzwxh:18493klzzwxh:18494klzzwxh:18495klzzwxh:18496klzzwxh:18497klzzwxh:18498klzzwxh:18499 resHolder = resHolder.klzzwxh:18354nextHolder;klzzwxh:18518klzzwxh:18500klzzwxh:18501klzzwxh:18502klzzwxh:18503klzzwxh:18504klzzwxh:18505klzzwxh:18506 klzzwxh:18355klzzwxh:18519klzzwxh:18507klzzwxh:18508klzzwxh:18509 klzzwxh:18356

klzzwxh:18542klzzwxh:18543klzzwxh:18544 /klzzwxh:18520klzzwxh:18521klzzwxh:18650klzzwxh:18545klzzwxh:18546klzzwxh:18547klzzwxh:18548 klzzwxh:18522 Resume previously suspended resources in the transaction andklzzwxh:18651klzzwxh:18549klzzwxh:18550klzzwxh:18551klzzwxh:18552 klzzwxh:18523 enlist the new specified resources in the transaction.klzzwxh:18652klzzwxh:18553klzzwxh:18554klzzwxh:18555klzzwxh:18556 klzzwxh:18524 The resources may already be enlisted.klzzwxh:18653klzzwxh:18557klzzwxh:18558klzzwxh:18559klzzwxh:18560 klzzwxh:18525 klzzwxh:18561Pklzzwxh:18562klzzwxh:18654klzzwxh:18563klzzwxh:18564klzzwxh:18565klzzwxh:18566 klzzwxh:18526 Active resources klzzwxh:18527ie non-suspendedklzzwxh:18528 are not affected.klzzwxh:18655klzzwxh:18567klzzwxh:18568klzzwxh:18569klzzwxh:18570 klzzwxh:18529klzzwxh:18656klzzwxh:18571klzzwxh:18572klzzwxh:18573klzzwxh:18574 klzzwxh:18530 @param xaResources The resources to be enlisted in the transaction,klzzwxh:18657klzzwxh:18575klzzwxh:18576klzzwxh:18577klzzwxh:18578 klzzwxh:18531 may be bullklzzwxh:18658klzzwxh:18579klzzwxh:18580klzzwxh:18581klzzwxh:18582 klzzwxh:18532/klzzwxh:18659klzzwxh:18583klzzwxh:18584klzzwxh:18585 protected synchronized void resumeAndEnlistResourcesklzzwxh:18533 XAResourceHolderklzzwxh:18534klzzwxh:18535 xaResourceHolders klzzwxh:18536klzzwxh:18660klzzwxh:18586klzzwxh:18587klzzwxh:18588klzzwxh:18589klzzwxh:18590klzzwxh:18591klzzwxh:18592 throws IllegalStateException, SystemException, RollbackExceptionklzzwxh:18661klzzwxh:18593klzzwxh:18594klzzwxh:18595 klzzwxh:18537klzzwxh:18662klzzwxh:18596klzzwxh:18597klzzwxh:18598klzzwxh:18599klzzwxh:18600klzzwxh:18601klzzwxh:18602 /klzzwxh:18538klzzwxh:18663klzzwxh:18603klzzwxh:18604klzzwxh:18605klzzwxh:18606klzzwxh:18607klzzwxh:18608klzzwxh:18609klzzwxh:18610klzzwxh:18611 This is not the cleanest way of performing the operation klzzwxh:18539this operationklzzwxh:18664klzzwxh:18612klzzwxh:18613klzzwxh:18614klzzwxh:18615klzzwxh:18616klzzwxh:18617klzzwxh:18618klzzwxh:18619klzzwxh:18620 should be split in twoklzzwxh:18540 but it is the most efficient.klzzwxh:18665klzzwxh:18621klzzwxh:18622klzzwxh:18623klzzwxh:18624klzzwxh:18625klzzwxh:18626klzzwxh:18627 klzzwxh:18541/klzzwxh:18666klzzwxh:18628klzzwxh:18629klzzwxh:18630klzzwxh:18631klzzwxh:18632klzzwxh:18633klzzwxh:18634 InternalXAResourceHolder resHolder;klzzwxh:18667klzzwxh:18635klzzwxh:18636klzzwxh:18637klzzwxh:18638klzzwxh:18639klzzwxh:18640klzzwxh:18641 XAResourceHolderklzzwxh:18642klzzwxh:18643klzzwxh:18644klzzwxh:18645klzzwxh:18646klzzwxh:18647klzzwxh:18648klzzwxh:18649 xaResourceHolder;

klzzwxh:18735klzzwxh:18736klzzwxh:18737klzzwxh:18738klzzwxh:18739klzzwxh:18740klzzwxh:18741 System.out.printlnklzzwxh:18668Thread.currentThreadklzzwxh:18669klzzwxh:18670.getNameklzzwxh:18671klzzwxh:18672 + klzzwxh:18742inside resumeAndEnlistResourcesklzzwxh:18743klzzwxh:18673;klzzwxh:19160klzzwxh:18744klzzwxh:18745klzzwxh:18746klzzwxh:18747klzzwxh:18748klzzwxh:18749klzzwxh:18750 if klzzwxh:18674 klzzwxh:18675enlisted klzzwxh:18676= null klzzwxh:18677 klzzwxh:18678klzzwxh:19161klzzwxh:18751klzzwxh:18752klzzwxh:18753klzzwxh:18754klzzwxh:18755klzzwxh:18756klzzwxh:18757 klzzwxh:19162klzzwxh:18758klzzwxh:18759klzzwxh:18760klzzwxh:18761klzzwxh:18762klzzwxh:18763klzzwxh:18764klzzwxh:18765klzzwxh:18766klzzwxh:18767klzzwxh:18768 ThreadContextklzzwxh:18769klzzwxh:18770 context;klzzwxh:19163klzzwxh:18771klzzwxh:18772klzzwxh:18773klzzwxh:18774klzzwxh:18775klzzwxh:18776klzzwxh:18777klzzwxh:18778klzzwxh:18779klzzwxh:18780klzzwxh:18781 context = ThreadContext.getThreadContextklzzwxh:18679klzzwxh:18680;klzzwxh:19164klzzwxh:18782klzzwxh:18783klzzwxh:18784klzzwxh:18785klzzwxh:18786klzzwxh:18787klzzwxh:18788klzzwxh:18789klzzwxh:18790klzzwxh:18791klzzwxh:18792 XAResourceHolderklzzwxh:18681klzzwxh:18682 ctxXaResHolders =klzzwxh:18793klzzwxh:18794klzzwxh:18795 context.getXAResourceHoldersklzzwxh:18683klzzwxh:18684;klzzwxh:19165klzzwxh:18796klzzwxh:18797klzzwxh:18798klzzwxh:18799klzzwxh:18800klzzwxh:18801klzzwxh:18802klzzwxh:18803klzzwxh:18804klzzwxh:18805 klzzwxh:19166klzzwxh:18806klzzwxh:18807klzzwxh:18808klzzwxh:18809klzzwxh:18810klzzwxh:18811klzzwxh:18812klzzwxh:18813klzzwxh:18814klzzwxh:18815klzzwxh:18816 // Look if we alredy got the resource enlisted. If theklzzwxh:19167klzzwxh:18817klzzwxh:18818klzzwxh:18819klzzwxh:18820klzzwxh:18821klzzwxh:18822klzzwxh:18823klzzwxh:18824klzzwxh:18825klzzwxh:18826klzzwxh:18827 // resource was suspended, we just resume it and go out.klzzwxh:19168klzzwxh:18828klzzwxh:18829klzzwxh:18830klzzwxh:18831klzzwxh:18832klzzwxh:18833klzzwxh:18834klzzwxh:18835klzzwxh:18836klzzwxh:18837klzzwxh:18838 // If the resource was started, we do not enlist it aklzzwxh:19169klzzwxh:18839klzzwxh:18840klzzwxh:18841klzzwxh:18842klzzwxh:18843klzzwxh:18844klzzwxh:18845klzzwxh:18846klzzwxh:18847klzzwxh:18848klzzwxh:18849 // second time.klzzwxh:19170klzzwxh:18850klzzwxh:18851klzzwxh:18852klzzwxh:18853klzzwxh:18854klzzwxh:18855klzzwxh:18856klzzwxh:18857klzzwxh:18858klzzwxh:18859klzzwxh:18860 resHolder = klzzwxh:18685enlisted;klzzwxh:19171klzzwxh:18861klzzwxh:18862klzzwxh:18863klzzwxh:18864klzzwxh:18865klzzwxh:18866klzzwxh:18867klzzwxh:18868klzzwxh:18869klzzwxh:18870klzzwxh:18871 while klzzwxh:18686 resHolder klzzwxh:18687= null klzzwxh:18688 klzzwxh:18689klzzwxh:19172klzzwxh:18872klzzwxh:18873klzzwxh:18874klzzwxh:18875klzzwxh:18876klzzwxh:18877klzzwxh:18878klzzwxh:18879klzzwxh:18880klzzwxh:18881klzzwxh:18882klzzwxh:18883klzzwxh:18884klzzwxh:18885klzzwxh:18886 System.out.printlnklzzwxh:18690Thread.currentThreadklzzwxh:18691klzzwxh:18692.getNameklzzwxh:18693klzzwxh:18694 + klzzwxh:18887inside resumeAndEnlistResources resHolder klzzwxh:18695= nullklzzwxh:18888klzzwxh:18696;klzzwxh:19173klzzwxh:18889klzzwxh:18890klzzwxh:18891klzzwxh:18892klzzwxh:18893klzzwxh:18894klzzwxh:18895klzzwxh:18896klzzwxh:18897klzzwxh:18898klzzwxh:18899klzzwxh:18900klzzwxh:18901klzzwxh:18902klzzwxh:18903 if klzzwxh:18697 resHolder.klzzwxh:18698endFlag == XAResource.TMSUSPEND klzzwxh:18699 klzzwxh:18700klzzwxh:19174klzzwxh:18904klzzwxh:18905klzzwxh:18906klzzwxh:18907klzzwxh:18908klzzwxh:18909klzzwxh:18910klzzwxh:18911klzzwxh:18912klzzwxh:18913klzzwxh:18914klzzwxh:18915klzzwxh:18916klzzwxh:18917klzzwxh:18918klzzwxh:18919klzzwxh:18920klzzwxh:18921klzzwxh:18922 System.out.printlnklzzwxh:18701Thread.currentThreadklzzwxh:18702klzzwxh:18703.getNameklzzwxh:18704klzzwxh:18705 + klzzwxh:18923inside resumeAndEnlistResources resHolder.klzzwxh:18706endFlag == XAResource.TMSUSPENDklzzwxh:18924klzzwxh:18707;klzzwxh:19175klzzwxh:18925klzzwxh:18926klzzwxh:18927klzzwxh:18928klzzwxh:18929klzzwxh:18930klzzwxh:18931klzzwxh:18932klzzwxh:18933klzzwxh:18934klzzwxh:18935klzzwxh:18936klzzwxh:18937klzzwxh:18938klzzwxh:18939klzzwxh:18940klzzwxh:18941klzzwxh:18942klzzwxh:18943 try klzzwxh:18708klzzwxh:19176klzzwxh:18944klzzwxh:18945klzzwxh:18946klzzwxh:18947klzzwxh:18948klzzwxh:18949klzzwxh:18950klzzwxh:18951klzzwxh:18952klzzwxh:18953klzzwxh:18954klzzwxh:18955klzzwxh:18956klzzwxh:18957klzzwxh:18958klzzwxh:18959klzzwxh:18960klzzwxh:18961klzzwxh:18962klzzwxh:18963klzzwxh:18964klzzwxh:18965klzzwxh:18966klzzwxh:18967 System.out.printlnklzzwxh:18709Thread.currentThreadklzzwxh:18710klzzwxh:18711.getNameklzzwxh:18712klzzwxh:18713 + klzzwxh:18968inside resumeAndEnlistResources resHolder.klzzwxh:18714xaResource.startklzzwxh:18715 resHolder.klzzwxh:18716xid, XAResource.TMRESUME klzzwxh:18717klzzwxh:18969klzzwxh:18718;klzzwxh:19177klzzwxh:18970klzzwxh:18971klzzwxh:18972klzzwxh:18973klzzwxh:18974klzzwxh:18975klzzwxh:18976klzzwxh:18977klzzwxh:18978klzzwxh:18979klzzwxh:18980klzzwxh:18981klzzwxh:18982klzzwxh:18983klzzwxh:18984klzzwxh:18985klzzwxh:18986klzzwxh:18987klzzwxh:18988klzzwxh:18989klzzwxh:18990klzzwxh:18991klzzwxh:18992 for klzzwxh:18719int j =0;j klzzwxh:18993 ctxXaResHolders.length ; j++klzzwxh:18720klzzwxh:19178klzzwxh:18994klzzwxh:18995klzzwxh:18996klzzwxh:18997klzzwxh:18998klzzwxh:18999klzzwxh:19000klzzwxh:19001klzzwxh:19002klzzwxh:19003klzzwxh:19004klzzwxh:19005klzzwxh:19006klzzwxh:19007klzzwxh:19008klzzwxh:19009klzzwxh:19010klzzwxh:19011klzzwxh:19012klzzwxh:19013klzzwxh:19014klzzwxh:19015klzzwxh:19016 klzzwxh:18721klzzwxh:19179klzzwxh:19017klzzwxh:19018klzzwxh:19019klzzwxh:19020klzzwxh:19021klzzwxh:19022klzzwxh:19023klzzwxh:19024klzzwxh:19025klzzwxh:19026klzzwxh:19027klzzwxh:19028klzzwxh:19029klzzwxh:19030klzzwxh:19031klzzwxh:19032klzzwxh:19033klzzwxh:19034klzzwxh:19035klzzwxh:19036klzzwxh:19037klzzwxh:19038klzzwxh:19039klzzwxh:19040klzzwxh:19041klzzwxh:19042klzzwxh:19043 if klzzwxh:18722ctxXaResHoldersklzzwxh:18723jklzzwxh:18724.klzzwxh:18725xaResource == resHolder.klzzwxh:18726xaResourceklzzwxh:18727klzzwxh:19180klzzwxh:19044klzzwxh:19045klzzwxh:19046klzzwxh:19047klzzwxh:19048klzzwxh:19049klzzwxh:19050klzzwxh:19051klzzwxh:19052klzzwxh:19053klzzwxh:19054klzzwxh:19055klzzwxh:19056klzzwxh:19057klzzwxh:19058klzzwxh:19059klzzwxh:19060klzzwxh:19061klzzwxh:19062klzzwxh:19063klzzwxh:19064klzzwxh:19065klzzwxh:19066klzzwxh:19067klzzwxh:19068klzzwxh:19069klzzwxh:19070 klzzwxh:18728klzzwxh:19181klzzwxh:19071klzzwxh:19072klzzwxh:19073klzzwxh:19074klzzwxh:19075klzzwxh:19076klzzwxh:19077klzzwxh:19078klzzwxh:19079klzzwxh:19080klzzwxh:19081klzzwxh:19082klzzwxh:19083klzzwxh:19084klzzwxh:19085klzzwxh:19086klzzwxh:19087klzzwxh:19088klzzwxh:19089klzzwxh:19090klzzwxh:19091klzzwxh:19092klzzwxh:19093klzzwxh:19094klzzwxh:19095klzzwxh:19096klzzwxh:19097klzzwxh:19098klzzwxh:19099klzzwxh:19100klzzwxh:19101 resHolder.klzzwxh:18729xaResource.startklzzwxh:18730 resHolder.klzzwxh:18731xid, XAResource.TMRESUME klzzwxh:18732;klzzwxh:19182klzzwxh:19102klzzwxh:19103klzzwxh:19104klzzwxh:19105klzzwxh:19106klzzwxh:19107klzzwxh:19108klzzwxh:19109klzzwxh:19110klzzwxh:19111klzzwxh:19112klzzwxh:19113klzzwxh:19114klzzwxh:19115klzzwxh:19116klzzwxh:19117klzzwxh:19118klzzwxh:19119klzzwxh:19120klzzwxh:19121klzzwxh:19122klzzwxh:19123klzzwxh:19124klzzwxh:19125klzzwxh:19126klzzwxh:19127klzzwxh:19128klzzwxh:19129klzzwxh:19130klzzwxh:19131klzzwxh:19132 resHolder.klzzwxh:18733endFlag = XAResource.TMNOFLAGS;klzzwxh:19183klzzwxh:19133klzzwxh:19134klzzwxh:19135klzzwxh:19136klzzwxh:19137klzzwxh:19138klzzwxh:19139klzzwxh:19140klzzwxh:19141klzzwxh:19142klzzwxh:19143klzzwxh:19144klzzwxh:19145klzzwxh:19146klzzwxh:19147klzzwxh:19148klzzwxh:19149klzzwxh:19150klzzwxh:19151klzzwxh:19152klzzwxh:19153klzzwxh:19154klzzwxh:19155klzzwxh:19156klzzwxh:19157klzzwxh:19158klzzwxh:19159 klzzwxh:18734

klzzwxh:19237klzzwxh:19238klzzwxh:19239klzzwxh:19240klzzwxh:19241klzzwxh:19242klzzwxh:19243klzzwxh:19244klzzwxh:19245klzzwxh:19246klzzwxh:19247klzzwxh:19248klzzwxh:19249klzzwxh:19250klzzwxh:19251klzzwxh:19252klzzwxh:19253klzzwxh:19254klzzwxh:19255klzzwxh:19256klzzwxh:19257klzzwxh:19258klzzwxh:19259 klzzwxh:19184klzzwxh:19668klzzwxh:19260klzzwxh:19261klzzwxh:19262klzzwxh:19263klzzwxh:19264klzzwxh:19265klzzwxh:19266klzzwxh:19267klzzwxh:19268klzzwxh:19269klzzwxh:19270klzzwxh:19271klzzwxh:19272klzzwxh:19273klzzwxh:19274klzzwxh:19275klzzwxh:19276klzzwxh:19277klzzwxh:19278 klzzwxh:19185 catch klzzwxh:19186 XAException except klzzwxh:19187 klzzwxh:19188klzzwxh:19669klzzwxh:19279klzzwxh:19280klzzwxh:19281klzzwxh:19282klzzwxh:19283klzzwxh:19284klzzwxh:19285klzzwxh:19286klzzwxh:19287klzzwxh:19288klzzwxh:19289klzzwxh:19290klzzwxh:19291klzzwxh:19292klzzwxh:19293klzzwxh:19294klzzwxh:19295klzzwxh:19296klzzwxh:19297klzzwxh:19298klzzwxh:19299klzzwxh:19300klzzwxh:19301 xaErrorklzzwxh:19189 resHolder, except klzzwxh:19190;klzzwxh:19670klzzwxh:19302klzzwxh:19303klzzwxh:19304klzzwxh:19305klzzwxh:19306klzzwxh:19307klzzwxh:19308klzzwxh:19309klzzwxh:19310klzzwxh:19311klzzwxh:19312klzzwxh:19313klzzwxh:19314klzzwxh:19315klzzwxh:19316klzzwxh:19317klzzwxh:19318klzzwxh:19319klzzwxh:19320 klzzwxh:19191 catch klzzwxh:19192 Exception except klzzwxh:19193 klzzwxh:19194klzzwxh:19671klzzwxh:19321klzzwxh:19322klzzwxh:19323klzzwxh:19324klzzwxh:19325klzzwxh:19326klzzwxh:19327klzzwxh:19328klzzwxh:19329klzzwxh:19330klzzwxh:19331klzzwxh:19332klzzwxh:19333klzzwxh:19334klzzwxh:19335klzzwxh:19336klzzwxh:19337klzzwxh:19338klzzwxh:19339klzzwxh:19340klzzwxh:19341klzzwxh:19342klzzwxh:19343 throw new NestedSystemExceptionklzzwxh:19195 except klzzwxh:19196;klzzwxh:19672klzzwxh:19344klzzwxh:19345klzzwxh:19346klzzwxh:19347klzzwxh:19348klzzwxh:19349klzzwxh:19350klzzwxh:19351klzzwxh:19352klzzwxh:19353klzzwxh:19354klzzwxh:19355klzzwxh:19356klzzwxh:19357klzzwxh:19358klzzwxh:19359klzzwxh:19360klzzwxh:19361klzzwxh:19362 klzzwxh:19197klzzwxh:19673klzzwxh:19363klzzwxh:19364klzzwxh:19365klzzwxh:19366klzzwxh:19367klzzwxh:19368klzzwxh:19369klzzwxh:19370klzzwxh:19371klzzwxh:19372klzzwxh:19373klzzwxh:19374klzzwxh:19375klzzwxh:19376klzzwxh:19377 klzzwxh:19198klzzwxh:19674klzzwxh:19378klzzwxh:19379klzzwxh:19380klzzwxh:19381klzzwxh:19382klzzwxh:19383klzzwxh:19384klzzwxh:19385klzzwxh:19386klzzwxh:19387klzzwxh:19388klzzwxh:19389klzzwxh:19390klzzwxh:19391klzzwxh:19392 resHolder = resHolder.klzzwxh:19199nextHolder;klzzwxh:19675klzzwxh:19393klzzwxh:19394klzzwxh:19395klzzwxh:19396klzzwxh:19397klzzwxh:19398klzzwxh:19399klzzwxh:19400klzzwxh:19401klzzwxh:19402klzzwxh:19403 klzzwxh:19200klzzwxh:19676klzzwxh:19404klzzwxh:19405klzzwxh:19406klzzwxh:19407klzzwxh:19408klzzwxh:19409klzzwxh:19410 klzzwxh:19677klzzwxh:19411klzzwxh:19412klzzwxh:19413klzzwxh:19414klzzwxh:19415klzzwxh:19416klzzwxh:19417klzzwxh:19418klzzwxh:19419klzzwxh:19420klzzwxh:19421 if klzzwxh:19201 null klzzwxh:19202= xaResourceHolders klzzwxh:19203 klzzwxh:19204klzzwxh:19678klzzwxh:19422klzzwxh:19423klzzwxh:19424klzzwxh:19425klzzwxh:19426klzzwxh:19427klzzwxh:19428klzzwxh:19429klzzwxh:19430klzzwxh:19431klzzwxh:19432klzzwxh:19433klzzwxh:19434klzzwxh:19435klzzwxh:19436 System.out.printlnklzzwxh:19205Thread.currentThreadklzzwxh:19206klzzwxh:19207.getNameklzzwxh:19208klzzwxh:19209 + klzzwxh:19437inside resumeAndEnlistResources null klzzwxh:19210= xaResourceHolders klzzwxh:19438klzzwxh:19211;klzzwxh:19679klzzwxh:19439klzzwxh:19440klzzwxh:19441klzzwxh:19442klzzwxh:19443klzzwxh:19444klzzwxh:19445klzzwxh:19446klzzwxh:19447klzzwxh:19448klzzwxh:19449klzzwxh:19450klzzwxh:19451klzzwxh:19452klzzwxh:19453 for klzzwxh:19212 int i = xaResourceHolders.length ; i-- klzzwxh:19454 0 ; klzzwxh:19213 klzzwxh:19214klzzwxh:19680klzzwxh:19455klzzwxh:19456klzzwxh:19457klzzwxh:19458klzzwxh:19459klzzwxh:19460klzzwxh:19461klzzwxh:19462klzzwxh:19463klzzwxh:19464klzzwxh:19465klzzwxh:19466klzzwxh:19467klzzwxh:19468klzzwxh:19469klzzwxh:19470klzzwxh:19471klzzwxh:19472klzzwxh:19473 xaResourceHolder = xaResourceHoldersklzzwxh:19215 i klzzwxh:19216;klzzwxh:19681klzzwxh:19474klzzwxh:19475klzzwxh:19476klzzwxh:19477klzzwxh:19478klzzwxh:19479klzzwxh:19480klzzwxh:19481klzzwxh:19482klzzwxh:19483klzzwxh:19484klzzwxh:19485klzzwxh:19486klzzwxh:19487klzzwxh:19488klzzwxh:19489klzzwxh:19490klzzwxh:19491klzzwxh:19492 resHolder = klzzwxh:19217enlisted;klzzwxh:19682klzzwxh:19493klzzwxh:19494klzzwxh:19495klzzwxh:19496klzzwxh:19497klzzwxh:19498klzzwxh:19499klzzwxh:19500klzzwxh:19501klzzwxh:19502klzzwxh:19503klzzwxh:19504klzzwxh:19505klzzwxh:19506klzzwxh:19507klzzwxh:19508klzzwxh:19509klzzwxh:19510klzzwxh:19511 while klzzwxh:19218 resHolder klzzwxh:19219= null klzzwxh:19220 klzzwxh:19221klzzwxh:19683klzzwxh:19512klzzwxh:19513klzzwxh:19514klzzwxh:19515klzzwxh:19516klzzwxh:19517klzzwxh:19518klzzwxh:19519klzzwxh:19520klzzwxh:19521klzzwxh:19522klzzwxh:19523klzzwxh:19524klzzwxh:19525klzzwxh:19526klzzwxh:19527klzzwxh:19528klzzwxh:19529klzzwxh:19530klzzwxh:19531klzzwxh:19532klzzwxh:19533klzzwxh:19534 if klzzwxh:19222 resHolder.klzzwxh:19223xaResource == xaResourceHolder.klzzwxh:19224xaResource klzzwxh:19225klzzwxh:19684klzzwxh:19535klzzwxh:19536klzzwxh:19537klzzwxh:19538klzzwxh:19539klzzwxh:19540klzzwxh:19541klzzwxh:19542klzzwxh:19543klzzwxh:19544klzzwxh:19545klzzwxh:19546klzzwxh:19547klzzwxh:19548klzzwxh:19549klzzwxh:19550klzzwxh:19551klzzwxh:19552klzzwxh:19553klzzwxh:19554klzzwxh:19555klzzwxh:19556klzzwxh:19557klzzwxh:19558klzzwxh:19559klzzwxh:19560klzzwxh:19561 break;klzzwxh:19685klzzwxh:19562klzzwxh:19563klzzwxh:19564klzzwxh:19565klzzwxh:19566klzzwxh:19567klzzwxh:19568klzzwxh:19569klzzwxh:19570klzzwxh:19571klzzwxh:19572klzzwxh:19573klzzwxh:19574klzzwxh:19575klzzwxh:19576klzzwxh:19577klzzwxh:19578klzzwxh:19579klzzwxh:19580klzzwxh:19581klzzwxh:19582klzzwxh:19583klzzwxh:19584 resHolder = resHolder.klzzwxh:19226nextHolder;klzzwxh:19686klzzwxh:19585klzzwxh:19586klzzwxh:19587klzzwxh:19588klzzwxh:19589klzzwxh:19590klzzwxh:19591klzzwxh:19592klzzwxh:19593klzzwxh:19594klzzwxh:19595klzzwxh:19596klzzwxh:19597klzzwxh:19598klzzwxh:19599klzzwxh:19600klzzwxh:19601klzzwxh:19602klzzwxh:19603 klzzwxh:19227klzzwxh:19687klzzwxh:19604klzzwxh:19605klzzwxh:19606klzzwxh:19607klzzwxh:19608klzzwxh:19609klzzwxh:19610klzzwxh:19611klzzwxh:19612klzzwxh:19613klzzwxh:19614klzzwxh:19615klzzwxh:19616klzzwxh:19617klzzwxh:19618klzzwxh:19619klzzwxh:19620klzzwxh:19621klzzwxh:19622 if klzzwxh:19228 resHolder == null klzzwxh:19229klzzwxh:19688klzzwxh:19623klzzwxh:19624klzzwxh:19625klzzwxh:19626klzzwxh:19627klzzwxh:19628klzzwxh:19629klzzwxh:19630klzzwxh:19631klzzwxh:19632klzzwxh:19633klzzwxh:19634klzzwxh:19635klzzwxh:19636klzzwxh:19637klzzwxh:19638klzzwxh:19639klzzwxh:19640klzzwxh:19641 klzzwxh:19230klzzwxh:19689klzzwxh:19642klzzwxh:19643klzzwxh:19644klzzwxh:19645klzzwxh:19646klzzwxh:19647klzzwxh:19648klzzwxh:19649klzzwxh:19650klzzwxh:19651klzzwxh:19652klzzwxh:19653klzzwxh:19654klzzwxh:19655klzzwxh:19656klzzwxh:19657klzzwxh:19658klzzwxh:19659klzzwxh:19660klzzwxh:19661klzzwxh:19662klzzwxh:19663klzzwxh:19664klzzwxh:19665 System.out.printlnklzzwxh:19231Thread.currentThreadklzzwxh:19232klzzwxh:19233.getNameklzzwxh:19234klzzwxh:19235 + klzzwxh:19666inside resumeAndEnlistResources addNewResource klzzwxh:19667klzzwxh:19236;

klzzwxh:19734klzzwxh:19735klzzwxh:19736klzzwxh:19737klzzwxh:19738klzzwxh:19739klzzwxh:19740klzzwxh:19741klzzwxh:19742klzzwxh:19743klzzwxh:19744klzzwxh:19745klzzwxh:19746klzzwxh:19747klzzwxh:19748klzzwxh:19749klzzwxh:19750klzzwxh:19751klzzwxh:19752klzzwxh:19753klzzwxh:19754klzzwxh:19755klzzwxh:19756 // new resourceklzzwxh:19915klzzwxh:19757klzzwxh:19758klzzwxh:19759klzzwxh:19760klzzwxh:19761klzzwxh:19762klzzwxh:19763klzzwxh:19764klzzwxh:19765klzzwxh:19766klzzwxh:19767klzzwxh:19768klzzwxh:19769klzzwxh:19770klzzwxh:19771klzzwxh:19772klzzwxh:19773klzzwxh:19774klzzwxh:19775klzzwxh:19776klzzwxh:19777klzzwxh:19778klzzwxh:19779 addNewResourceklzzwxh:19690 xaResourceHolder.klzzwxh:19691xaResource, xaResourceHolder.klzzwxh:19692callback klzzwxh:19693;klzzwxh:19916klzzwxh:19780klzzwxh:19781klzzwxh:19782klzzwxh:19783klzzwxh:19784klzzwxh:19785klzzwxh:19786klzzwxh:19787klzzwxh:19788klzzwxh:19789klzzwxh:19790klzzwxh:19791klzzwxh:19792klzzwxh:19793klzzwxh:19794klzzwxh:19795klzzwxh:19796klzzwxh:19797klzzwxh:19798 klzzwxh:19694klzzwxh:19917klzzwxh:19799klzzwxh:19800klzzwxh:19801klzzwxh:19802klzzwxh:19803klzzwxh:19804klzzwxh:19805klzzwxh:19806klzzwxh:19807klzzwxh:19808klzzwxh:19809klzzwxh:19810klzzwxh:19811klzzwxh:19812klzzwxh:19813 klzzwxh:19695klzzwxh:19918klzzwxh:19814klzzwxh:19815klzzwxh:19816klzzwxh:19817klzzwxh:19818klzzwxh:19819klzzwxh:19820klzzwxh:19821klzzwxh:19822klzzwxh:19823klzzwxh:19824 klzzwxh:19696klzzwxh:19919klzzwxh:19825klzzwxh:19826klzzwxh:19827klzzwxh:19828klzzwxh:19829klzzwxh:19830klzzwxh:19831 klzzwxh:19697 else if klzzwxh:19698 null klzzwxh:19699= xaResourceHolders klzzwxh:19700 klzzwxh:19701klzzwxh:19920klzzwxh:19832klzzwxh:19833klzzwxh:19834klzzwxh:19835klzzwxh:19836klzzwxh:19837klzzwxh:19838klzzwxh:19839 System.out.printlnklzzwxh:19702Thread.currentThreadklzzwxh:19703klzzwxh:19704.getNameklzzwxh:19705klzzwxh:19706 + klzzwxh:19840inside resumeAndEnlistResources else if klzzwxh:19707 null klzzwxh:19708= xaResourceHolders klzzwxh:19709 klzzwxh:19841klzzwxh:19710;klzzwxh:19921klzzwxh:19842klzzwxh:19843klzzwxh:19844klzzwxh:19845klzzwxh:19846klzzwxh:19847klzzwxh:19848klzzwxh:19849klzzwxh:19850 for klzzwxh:19711 int i = xaResourceHolders.length ; i-- klzzwxh:19851 0 ; klzzwxh:19712klzzwxh:19922klzzwxh:19852klzzwxh:19853klzzwxh:19854klzzwxh:19855klzzwxh:19856klzzwxh:19857klzzwxh:19858klzzwxh:19859klzzwxh:19860klzzwxh:19861klzzwxh:19862 klzzwxh:19713klzzwxh:19923klzzwxh:19863klzzwxh:19864klzzwxh:19865klzzwxh:19866klzzwxh:19867klzzwxh:19868klzzwxh:19869klzzwxh:19870klzzwxh:19871klzzwxh:19872klzzwxh:19873klzzwxh:19874klzzwxh:19875klzzwxh:19876klzzwxh:19877 System.out.printlnklzzwxh:19714Thread.currentThreadklzzwxh:19715klzzwxh:19716.getNameklzzwxh:19717klzzwxh:19718 + klzzwxh:19878inside resumeAndEnlistResources addNewResource klzzwxh:19879 + xaResourceHoldersklzzwxh:19719 i klzzwxh:19720.klzzwxh:19721xaResourceklzzwxh:19722;klzzwxh:19924klzzwxh:19880klzzwxh:19881klzzwxh:19882klzzwxh:19883klzzwxh:19884klzzwxh:19885klzzwxh:19886klzzwxh:19887klzzwxh:19888klzzwxh:19889klzzwxh:19890klzzwxh:19891klzzwxh:19892klzzwxh:19893 addNewResourceklzzwxh:19723 xaResourceHoldersklzzwxh:19724 i klzzwxh:19725.klzzwxh:19726xaResource, xaResourceHoldersklzzwxh:19727 i klzzwxh:19728.klzzwxh:19729callback klzzwxh:19730;klzzwxh:19925klzzwxh:19894klzzwxh:19895klzzwxh:19896klzzwxh:19897klzzwxh:19898klzzwxh:19899klzzwxh:19900klzzwxh:19901klzzwxh:19902klzzwxh:19903klzzwxh:19904 klzzwxh:19731klzzwxh:19926klzzwxh:19905klzzwxh:19906klzzwxh:19907klzzwxh:19908klzzwxh:19909klzzwxh:19910klzzwxh:19911 klzzwxh:19732klzzwxh:19927klzzwxh:19912klzzwxh:19913klzzwxh:19914 klzzwxh:19733

klzzwxh:19941klzzwxh:19942klzzwxh:19943 /klzzwxh:19928klzzwxh:19929klzzwxh:19988klzzwxh:19944klzzwxh:19945klzzwxh:19946klzzwxh:19947 klzzwxh:19930 Called to register an OTS resource with the transaction. Usedklzzwxh:19989klzzwxh:19948klzzwxh:19949klzzwxh:19950klzzwxh:19951 klzzwxh:19931 internally to perform nested transactions and exposed throughklzzwxh:19990klzzwxh:19952klzzwxh:19953klzzwxh:19954klzzwxh:19955 klzzwxh:19932 the OTS interface.klzzwxh:19991klzzwxh:19956klzzwxh:19957klzzwxh:19958klzzwxh:19959 klzzwxh:19933klzzwxh:19992klzzwxh:19960klzzwxh:19961klzzwxh:19962klzzwxh:19963 klzzwxh:19934 @param res The OTS resource to registerklzzwxh:19993klzzwxh:19964klzzwxh:19965klzzwxh:19966klzzwxh:19967 klzzwxh:19935/klzzwxh:19994klzzwxh:19968klzzwxh:19969klzzwxh:19970 protected synchronized void registerResourceklzzwxh:19936 Resource resource klzzwxh:19937klzzwxh:19995klzzwxh:19971klzzwxh:19972klzzwxh:19973klzzwxh:19974klzzwxh:19975klzzwxh:19976klzzwxh:19977 throws IllegalStateExceptionklzzwxh:19996klzzwxh:19978klzzwxh:19979klzzwxh:19980 klzzwxh:19938klzzwxh:19997klzzwxh:19981klzzwxh:19982klzzwxh:19983klzzwxh:19984klzzwxh:19985klzzwxh:19986klzzwxh:19987 Resourceklzzwxh:19939klzzwxh:19940 newResources;

klzzwxh:20002klzzwxh:20003klzzwxh:20004klzzwxh:20005klzzwxh:20006klzzwxh:20007klzzwxh:20008 if klzzwxh:19998 resource == null klzzwxh:19999klzzwxh:20022klzzwxh:20009klzzwxh:20010klzzwxh:20011klzzwxh:20012klzzwxh:20013klzzwxh:20014klzzwxh:20015klzzwxh:20016klzzwxh:20017klzzwxh:20018klzzwxh:20019 throw new IllegalArgumentExceptionklzzwxh:20000 klzzwxh:20020Argument resource is nullklzzwxh:20021 klzzwxh:20001;

klzzwxh:20049klzzwxh:20050klzzwxh:20051klzzwxh:20052klzzwxh:20053klzzwxh:20054klzzwxh:20055 // Check the status of the transaction and act accordingly.klzzwxh:20217klzzwxh:20056klzzwxh:20057klzzwxh:20058klzzwxh:20059klzzwxh:20060klzzwxh:20061klzzwxh:20062 switch klzzwxh:20023 klzzwxh:20024status klzzwxh:20025 klzzwxh:20026klzzwxh:20218klzzwxh:20063klzzwxh:20064klzzwxh:20065klzzwxh:20066klzzwxh:20067klzzwxh:20068klzzwxh:20069 case STATUSklzzwxh:20027ACTIVE:klzzwxh:20219klzzwxh:20070klzzwxh:20071klzzwxh:20072klzzwxh:20073klzzwxh:20074klzzwxh:20075klzzwxh:20076 case STATUSklzzwxh:20028MARKEDklzzwxh:20029ROLLBACK:klzzwxh:20220klzzwxh:20077klzzwxh:20078klzzwxh:20079klzzwxh:20080klzzwxh:20081klzzwxh:20082klzzwxh:20083klzzwxh:20084klzzwxh:20085klzzwxh:20086klzzwxh:20087 // Transaction is active, or marked for rollback, klzzwxh:20221klzzwxh:20088klzzwxh:20089klzzwxh:20090klzzwxh:20091klzzwxh:20092klzzwxh:20093klzzwxh:20094klzzwxh:20095klzzwxh:20096klzzwxh:20097klzzwxh:20098 // we can register this resource.klzzwxh:20222klzzwxh:20099klzzwxh:20100klzzwxh:20101klzzwxh:20102klzzwxh:20103klzzwxh:20104klzzwxh:20105klzzwxh:20106klzzwxh:20107klzzwxh:20108klzzwxh:20109 break;klzzwxh:20223klzzwxh:20110klzzwxh:20111klzzwxh:20112klzzwxh:20113klzzwxh:20114klzzwxh:20115klzzwxh:20116 case STATUSklzzwxh:20030PREPARED:klzzwxh:20224klzzwxh:20117klzzwxh:20118klzzwxh:20119klzzwxh:20120klzzwxh:20121klzzwxh:20122klzzwxh:20123 case STATUSklzzwxh:20031PREPARING:klzzwxh:20225klzzwxh:20124klzzwxh:20125klzzwxh:20126klzzwxh:20127klzzwxh:20128klzzwxh:20129klzzwxh:20130 case STATUSklzzwxh:20032COMMITTING:klzzwxh:20226klzzwxh:20131klzzwxh:20132klzzwxh:20133klzzwxh:20134klzzwxh:20135klzzwxh:20136klzzwxh:20137klzzwxh:20138klzzwxh:20139klzzwxh:20140klzzwxh:20141 // Transaction is preparing, cannotr register.klzzwxh:20227klzzwxh:20142klzzwxh:20143klzzwxh:20144klzzwxh:20145klzzwxh:20146klzzwxh:20147klzzwxh:20148klzzwxh:20149klzzwxh:20150klzzwxh:20151klzzwxh:20152 throw new IllegalStateExceptionklzzwxh:20033 Messages.messageklzzwxh:20034 klzzwxh:20153tyrex.tx.inCommitklzzwxh:20154 klzzwxh:20035 klzzwxh:20036;klzzwxh:20228klzzwxh:20155klzzwxh:20156klzzwxh:20157klzzwxh:20158klzzwxh:20159klzzwxh:20160klzzwxh:20161 case STATUSklzzwxh:20037ROLLEDBACK:klzzwxh:20229klzzwxh:20162klzzwxh:20163klzzwxh:20164klzzwxh:20165klzzwxh:20166klzzwxh:20167klzzwxh:20168 case STATUSklzzwxh:20038ROLLINGklzzwxh:20039BACK:klzzwxh:20230klzzwxh:20169klzzwxh:20170klzzwxh:20171klzzwxh:20172klzzwxh:20173klzzwxh:20174klzzwxh:20175 case STATUSklzzwxh:20040COMMITTED:klzzwxh:20231klzzwxh:20176klzzwxh:20177klzzwxh:20178klzzwxh:20179klzzwxh:20180klzzwxh:20181klzzwxh:20182 case STATUSklzzwxh:20041NOklzzwxh:20042TRANSACTION:klzzwxh:20232klzzwxh:20183klzzwxh:20184klzzwxh:20185klzzwxh:20186klzzwxh:20187klzzwxh:20188klzzwxh:20189 case STATUSklzzwxh:20043UNKNOWN:klzzwxh:20233klzzwxh:20190klzzwxh:20191klzzwxh:20192klzzwxh:20193klzzwxh:20194klzzwxh:20195klzzwxh:20196 default:klzzwxh:20234klzzwxh:20197klzzwxh:20198klzzwxh:20199klzzwxh:20200klzzwxh:20201klzzwxh:20202klzzwxh:20203klzzwxh:20204klzzwxh:20205klzzwxh:20206klzzwxh:20207 throw new IllegalStateExceptionklzzwxh:20044 Messages.messageklzzwxh:20045 klzzwxh:20208tyrex.tx.inactiveklzzwxh:20209 klzzwxh:20046 klzzwxh:20047;klzzwxh:20235klzzwxh:20210klzzwxh:20211klzzwxh:20212klzzwxh:20213klzzwxh:20214klzzwxh:20215klzzwxh:20216 klzzwxh:20048

klzzwxh:20272klzzwxh:20273klzzwxh:20274klzzwxh:20275klzzwxh:20276klzzwxh:20277klzzwxh:20278 if klzzwxh:20236 klzzwxh:20237resources == null klzzwxh:20238 klzzwxh:20239klzzwxh:20438klzzwxh:20279klzzwxh:20280klzzwxh:20281klzzwxh:20282klzzwxh:20283klzzwxh:20284klzzwxh:20285klzzwxh:20286klzzwxh:20287klzzwxh:20288klzzwxh:20289 klzzwxh:20240resources = new Resourceklzzwxh:20241klzzwxh:20242 klzzwxh:20243 resource klzzwxh:20244;klzzwxh:20439klzzwxh:20290klzzwxh:20291klzzwxh:20292klzzwxh:20293klzzwxh:20294klzzwxh:20295klzzwxh:20296 klzzwxh:20245 else klzzwxh:20246klzzwxh:20440klzzwxh:20297klzzwxh:20298klzzwxh:20299klzzwxh:20300klzzwxh:20301klzzwxh:20302klzzwxh:20303klzzwxh:20304klzzwxh:20305klzzwxh:20306klzzwxh:20307 // It is less likely, but still possible to getklzzwxh:20441klzzwxh:20308klzzwxh:20309klzzwxh:20310klzzwxh:20311klzzwxh:20312klzzwxh:20313klzzwxh:20314klzzwxh:20315klzzwxh:20316klzzwxh:20317klzzwxh:20318 // duplicity in resource registration.klzzwxh:20442klzzwxh:20319klzzwxh:20320klzzwxh:20321klzzwxh:20322klzzwxh:20323klzzwxh:20324klzzwxh:20325klzzwxh:20326klzzwxh:20327klzzwxh:20328klzzwxh:20329 for klzzwxh:20247 int i = klzzwxh:20248resources.length ; i-- klzzwxh:20330 0 ; klzzwxh:20249klzzwxh:20443klzzwxh:20331klzzwxh:20332klzzwxh:20333klzzwxh:20334klzzwxh:20335klzzwxh:20336klzzwxh:20337klzzwxh:20338klzzwxh:20339klzzwxh:20340klzzwxh:20341klzzwxh:20342klzzwxh:20343klzzwxh:20344klzzwxh:20345 if klzzwxh:20250 klzzwxh:20251resourcesklzzwxh:20252 i klzzwxh:20253 == resource klzzwxh:20254klzzwxh:20444klzzwxh:20346klzzwxh:20347klzzwxh:20348klzzwxh:20349klzzwxh:20350klzzwxh:20351klzzwxh:20352klzzwxh:20353klzzwxh:20354klzzwxh:20355klzzwxh:20356klzzwxh:20357klzzwxh:20358klzzwxh:20359klzzwxh:20360klzzwxh:20361klzzwxh:20362klzzwxh:20363klzzwxh:20364 return;klzzwxh:20445klzzwxh:20365klzzwxh:20366klzzwxh:20367klzzwxh:20368klzzwxh:20369klzzwxh:20370klzzwxh:20371klzzwxh:20372klzzwxh:20373klzzwxh:20374klzzwxh:20375 newResources = new Resourceklzzwxh:20255 klzzwxh:20256resources.length + 1 klzzwxh:20257;klzzwxh:20446klzzwxh:20376klzzwxh:20377klzzwxh:20378klzzwxh:20379klzzwxh:20380klzzwxh:20381klzzwxh:20382klzzwxh:20383klzzwxh:20384klzzwxh:20385klzzwxh:20386 for klzzwxh:20258 int i = klzzwxh:20259resources.length ; i-- klzzwxh:20387 0 ; klzzwxh:20260klzzwxh:20447klzzwxh:20388klzzwxh:20389klzzwxh:20390klzzwxh:20391klzzwxh:20392klzzwxh:20393klzzwxh:20394klzzwxh:20395klzzwxh:20396klzzwxh:20397klzzwxh:20398klzzwxh:20399klzzwxh:20400klzzwxh:20401klzzwxh:20402 newResourcesklzzwxh:20261 i klzzwxh:20262 = klzzwxh:20263resourcesklzzwxh:20264 i klzzwxh:20265;klzzwxh:20448klzzwxh:20403klzzwxh:20404klzzwxh:20405klzzwxh:20406klzzwxh:20407klzzwxh:20408klzzwxh:20409klzzwxh:20410klzzwxh:20411klzzwxh:20412klzzwxh:20413 newResourcesklzzwxh:20266 klzzwxh:20267resources.length klzzwxh:20268 = resource;klzzwxh:20449klzzwxh:20414klzzwxh:20415klzzwxh:20416klzzwxh:20417klzzwxh:20418klzzwxh:20419klzzwxh:20420klzzwxh:20421klzzwxh:20422klzzwxh:20423klzzwxh:20424 klzzwxh:20269resources = newResources;klzzwxh:20450klzzwxh:20425klzzwxh:20426klzzwxh:20427klzzwxh:20428klzzwxh:20429klzzwxh:20430klzzwxh:20431 klzzwxh:20270klzzwxh:20432klzzwxh:20433klzzwxh:20434 klzzwxh:20451klzzwxh:20435klzzwxh:20436klzzwxh:20437 klzzwxh:20271

klzzwxh:20488klzzwxh:20489klzzwxh:20490 /klzzwxh:20452klzzwxh:20453klzzwxh:20633klzzwxh:20491klzzwxh:20492klzzwxh:20493klzzwxh:20494 klzzwxh:20454 Returns a normalized heuristic decision based on the suppliedklzzwxh:20634klzzwxh:20495klzzwxh:20496klzzwxh:20497klzzwxh:20498 klzzwxh:20455 non-normalized heuristic. A normalized heuristic has at mostklzzwxh:20635klzzwxh:20499klzzwxh:20500klzzwxh:20501klzzwxh:20502 klzzwxh:20456 one flag set it in. For example, if both commit and rollbackklzzwxh:20636klzzwxh:20503klzzwxh:20504klzzwxh:20505klzzwxh:20506 klzzwxh:20457 flags are set, the outcome is a mixed heuristic. If both commitklzzwxh:20637klzzwxh:20507klzzwxh:20508klzzwxh:20509klzzwxh:20510 klzzwxh:20458 and mixed are set, the outcome is again a mixed heuristic.klzzwxh:20638klzzwxh:20511klzzwxh:20512klzzwxh:20513klzzwxh:20514 klzzwxh:20459klzzwxh:20639klzzwxh:20515klzzwxh:20516klzzwxh:20517klzzwxh:20518 klzzwxh:20460 @param heuristic A non-normalized heuristic decisionklzzwxh:20640klzzwxh:20519klzzwxh:20520klzzwxh:20521klzzwxh:20522 klzzwxh:20461 @return A normalized heuristic decisionklzzwxh:20641klzzwxh:20523klzzwxh:20524klzzwxh:20525klzzwxh:20526 klzzwxh:20462/klzzwxh:20642klzzwxh:20527klzzwxh:20528klzzwxh:20529 protected int normalizeklzzwxh:20463 int heuristic klzzwxh:20464klzzwxh:20643klzzwxh:20530klzzwxh:20531klzzwxh:20532 klzzwxh:20465klzzwxh:20644klzzwxh:20533klzzwxh:20534klzzwxh:20535klzzwxh:20536klzzwxh:20537klzzwxh:20538klzzwxh:20539 if klzzwxh:20466 klzzwxh:20467 heuristic klzzwxh:20540 Heuristic.HAZARD klzzwxh:20468 klzzwxh:20469= 0 klzzwxh:20470klzzwxh:20645klzzwxh:20541klzzwxh:20542klzzwxh:20543klzzwxh:20544klzzwxh:20545klzzwxh:20546klzzwxh:20547klzzwxh:20548klzzwxh:20549klzzwxh:20550klzzwxh:20551 return Heuristic.HAZARD;klzzwxh:20646klzzwxh:20552klzzwxh:20553klzzwxh:20554klzzwxh:20555klzzwxh:20556klzzwxh:20557klzzwxh:20558 else if klzzwxh:20471 klzzwxh:20472 heuristic klzzwxh:20559 Heuristic.MIXED klzzwxh:20473 klzzwxh:20474= 0 klzzwxh:20475klzzwxh:20647klzzwxh:20560klzzwxh:20561klzzwxh:20562klzzwxh:20563klzzwxh:20564klzzwxh:20565klzzwxh:20566klzzwxh:20567klzzwxh:20568klzzwxh:20569klzzwxh:20570 return Heuristic.MIXED;klzzwxh:20648klzzwxh:20571klzzwxh:20572klzzwxh:20573klzzwxh:20574klzzwxh:20575klzzwxh:20576klzzwxh:20577 else if klzzwxh:20476 klzzwxh:20477 heuristic klzzwxh:20578 Heuristic.OTHER klzzwxh:20478 klzzwxh:20479= 0 klzzwxh:20480klzzwxh:20649klzzwxh:20579klzzwxh:20580klzzwxh:20581klzzwxh:20582klzzwxh:20583klzzwxh:20584klzzwxh:20585klzzwxh:20586klzzwxh:20587klzzwxh:20588klzzwxh:20589 return Heuristic.OTHER;klzzwxh:20590klzzwxh:20591klzzwxh:20592 klzzwxh:20650klzzwxh:20593klzzwxh:20594klzzwxh:20595klzzwxh:20596klzzwxh:20597klzzwxh:20598klzzwxh:20599 else if klzzwxh:20481 klzzwxh:20482 heuristic klzzwxh:20600 klzzwxh:20483 Heuristic.COMMIT + Heuristic.ROLLBACK klzzwxh:20484 klzzwxh:20485 == Heuristic.COMMIT + Heuristic.ROLLBACK klzzwxh:20486klzzwxh:20651klzzwxh:20601klzzwxh:20602klzzwxh:20603klzzwxh:20604klzzwxh:20605klzzwxh:20606klzzwxh:20607klzzwxh:20608klzzwxh:20609klzzwxh:20610klzzwxh:20611 return Heuristic.MIXED;klzzwxh:20652klzzwxh:20612klzzwxh:20613klzzwxh:20614klzzwxh:20615klzzwxh:20616klzzwxh:20617klzzwxh:20618 elseklzzwxh:20653klzzwxh:20619klzzwxh:20620klzzwxh:20621klzzwxh:20622klzzwxh:20623klzzwxh:20624klzzwxh:20625klzzwxh:20626klzzwxh:20627klzzwxh:20628klzzwxh:20629 return heuristic;klzzwxh:20654klzzwxh:20630klzzwxh:20631klzzwxh:20632 klzzwxh:20487

klzzwxh:20671klzzwxh:20672klzzwxh:20673 /klzzwxh:20655klzzwxh:20656klzzwxh:20714klzzwxh:20674klzzwxh:20675klzzwxh:20676klzzwxh:20677 klzzwxh:20657 Returns the heuristic decision of this transaction after itklzzwxh:20715klzzwxh:20678klzzwxh:20679klzzwxh:20680klzzwxh:20681 klzzwxh:20658 has been prepared, commited or rolledback. At all other timesklzzwxh:20716klzzwxh:20682klzzwxh:20683klzzwxh:20684klzzwxh:20685 klzzwxh:20659 this method will return klzzwxh:20660@link klzzwxh:20661Heuristic.READONLYklzzwxh:20662.klzzwxh:20717klzzwxh:20686klzzwxh:20687klzzwxh:20688klzzwxh:20689 klzzwxh:20663klzzwxh:20718klzzwxh:20690klzzwxh:20691klzzwxh:20692klzzwxh:20693 klzzwxh:20664 @return The heuristic decision of this transactionklzzwxh:20719klzzwxh:20694klzzwxh:20695klzzwxh:20696klzzwxh:20697 klzzwxh:20665/klzzwxh:20720klzzwxh:20698klzzwxh:20699klzzwxh:20700 protected int getHeuristicklzzwxh:20666klzzwxh:20667klzzwxh:20721klzzwxh:20701klzzwxh:20702klzzwxh:20703 klzzwxh:20668klzzwxh:20722klzzwxh:20704klzzwxh:20705klzzwxh:20706klzzwxh:20707klzzwxh:20708klzzwxh:20709klzzwxh:20710 return klzzwxh:20669heuristic;klzzwxh:20723klzzwxh:20711klzzwxh:20712klzzwxh:20713 klzzwxh:20670

klzzwxh:20757klzzwxh:20758klzzwxh:20759 /klzzwxh:20724klzzwxh:20725klzzwxh:20940klzzwxh:20760klzzwxh:20761klzzwxh:20762klzzwxh:20763 klzzwxh:20726 Called by klzzwxh:20727@link TransactionDomainklzzwxh:20728 to change the timeout forklzzwxh:20941klzzwxh:20764klzzwxh:20765klzzwxh:20766klzzwxh:20767 klzzwxh:20729 the transaction's resources to the new value. This might orklzzwxh:20942klzzwxh:20768klzzwxh:20769klzzwxh:20770klzzwxh:20771 klzzwxh:20730 might not have an effect on the underlying resources.klzzwxh:20943klzzwxh:20772klzzwxh:20773klzzwxh:20774klzzwxh:20775 klzzwxh:20731 All consistency checks are made by the server.klzzwxh:20944klzzwxh:20776klzzwxh:20777klzzwxh:20778klzzwxh:20779 klzzwxh:20732klzzwxh:20945klzzwxh:20780klzzwxh:20781klzzwxh:20782klzzwxh:20783 klzzwxh:20733 @param secods The new timeout in secondsklzzwxh:20946klzzwxh:20784klzzwxh:20785klzzwxh:20786klzzwxh:20787 klzzwxh:20734 @see TransactionDomainklzzwxh:20735setTransactionTimeoutklzzwxh:20947klzzwxh:20788klzzwxh:20789klzzwxh:20790klzzwxh:20791 klzzwxh:20736/klzzwxh:20948klzzwxh:20792klzzwxh:20793klzzwxh:20794 protected void internalSetTransactionTimeoutklzzwxh:20737 int seconds klzzwxh:20738klzzwxh:20949klzzwxh:20795klzzwxh:20796klzzwxh:20797 klzzwxh:20739klzzwxh:20950klzzwxh:20798klzzwxh:20799klzzwxh:20800klzzwxh:20801klzzwxh:20802klzzwxh:20803klzzwxh:20804 InternalXAResourceHolder resHolder;klzzwxh:20951klzzwxh:20805klzzwxh:20806klzzwxh:20807 klzzwxh:20952klzzwxh:20808klzzwxh:20809klzzwxh:20810klzzwxh:20811klzzwxh:20812klzzwxh:20813klzzwxh:20814 resHolder = klzzwxh:20740enlisted;klzzwxh:20953klzzwxh:20815klzzwxh:20816klzzwxh:20817klzzwxh:20818klzzwxh:20819klzzwxh:20820klzzwxh:20821 while klzzwxh:20741 resHolder klzzwxh:20742= null klzzwxh:20743 klzzwxh:20744klzzwxh:20954klzzwxh:20822klzzwxh:20823klzzwxh:20824klzzwxh:20825klzzwxh:20826klzzwxh:20827klzzwxh:20828klzzwxh:20829klzzwxh:20830klzzwxh:20831klzzwxh:20832 try klzzwxh:20745klzzwxh:20955klzzwxh:20833klzzwxh:20834klzzwxh:20835klzzwxh:20836klzzwxh:20837klzzwxh:20838klzzwxh:20839klzzwxh:20840klzzwxh:20841klzzwxh:20842klzzwxh:20843klzzwxh:20844klzzwxh:20845klzzwxh:20846klzzwxh:20847 resHolder.klzzwxh:20746xaResource.setTransactionTimeoutklzzwxh:20747 seconds klzzwxh:20748;klzzwxh:20956klzzwxh:20848klzzwxh:20849klzzwxh:20850klzzwxh:20851klzzwxh:20852klzzwxh:20853klzzwxh:20854klzzwxh:20855klzzwxh:20856klzzwxh:20857klzzwxh:20858 klzzwxh:20749 catch klzzwxh:20750 XAException exceptklzzwxh:20859 klzzwxh:20751 klzzwxh:20752klzzwxh:20957klzzwxh:20860klzzwxh:20861klzzwxh:20862klzzwxh:20863klzzwxh:20864klzzwxh:20865klzzwxh:20866klzzwxh:20867klzzwxh:20868klzzwxh:20869klzzwxh:20870klzzwxh:20871klzzwxh:20872klzzwxh:20873klzzwxh:20874 // We could care less if we managed to set theklzzwxh:20958klzzwxh:20875klzzwxh:20876klzzwxh:20877klzzwxh:20878klzzwxh:20879klzzwxh:20880klzzwxh:20881klzzwxh:20882klzzwxh:20883klzzwxh:20884klzzwxh:20885klzzwxh:20886klzzwxh:20887klzzwxh:20888klzzwxh:20889 // timeout on the resource. We have to assume itklzzwxh:20959klzzwxh:20890klzzwxh:20891klzzwxh:20892klzzwxh:20893klzzwxh:20894klzzwxh:20895klzzwxh:20896klzzwxh:20897klzzwxh:20898klzzwxh:20899klzzwxh:20900klzzwxh:20901klzzwxh:20902klzzwxh:20903klzzwxh:20904 // might not timeout when we expect it anyway.klzzwxh:20960klzzwxh:20905klzzwxh:20906klzzwxh:20907klzzwxh:20908klzzwxh:20909klzzwxh:20910klzzwxh:20911klzzwxh:20912klzzwxh:20913klzzwxh:20914klzzwxh:20915 klzzwxh:20753klzzwxh:20961klzzwxh:20916klzzwxh:20917klzzwxh:20918klzzwxh:20919klzzwxh:20920klzzwxh:20921klzzwxh:20922klzzwxh:20923klzzwxh:20924klzzwxh:20925klzzwxh:20926 resHolder = resHolder.klzzwxh:20754nextHolder;klzzwxh:20927klzzwxh:20928klzzwxh:20929 klzzwxh:20962klzzwxh:20930klzzwxh:20931klzzwxh:20932klzzwxh:20933klzzwxh:20934klzzwxh:20935klzzwxh:20936 klzzwxh:20755klzzwxh:20963klzzwxh:20937klzzwxh:20938klzzwxh:20939 klzzwxh:20756

klzzwxh:20989klzzwxh:20990klzzwxh:20991 /klzzwxh:20964klzzwxh:20965klzzwxh:21093klzzwxh:20992klzzwxh:20993klzzwxh:20994klzzwxh:20995 klzzwxh:20966 Indicates that the transaction has been rolled back due to time out.klzzwxh:21094klzzwxh:20996klzzwxh:20997klzzwxh:20998klzzwxh:20999 klzzwxh:20967 Automatically performs a rollback on the transaction. We onlyklzzwxh:21095klzzwxh:21000klzzwxh:21001klzzwxh:21002klzzwxh:21003 klzzwxh:20968 reach this state if the transaction is active.klzzwxh:21096klzzwxh:21004klzzwxh:21005klzzwxh:21006klzzwxh:21007 klzzwxh:20969/klzzwxh:21097klzzwxh:21008klzzwxh:21009klzzwxh:21010 protected synchronized void timedOutklzzwxh:20970klzzwxh:20971klzzwxh:21098klzzwxh:21011klzzwxh:21012klzzwxh:21013 klzzwxh:20972klzzwxh:21099klzzwxh:21014klzzwxh:21015klzzwxh:21016klzzwxh:21017klzzwxh:21018klzzwxh:21019klzzwxh:21020 if klzzwxh:20973 klzzwxh:20974 klzzwxh:20975timedOut klzzwxh:20976 klzzwxh:20977klzzwxh:21100klzzwxh:21021klzzwxh:21022klzzwxh:21023klzzwxh:21024klzzwxh:21025klzzwxh:21026klzzwxh:21027klzzwxh:21028klzzwxh:21029klzzwxh:21030klzzwxh:21031 // Let the rollback mechanism know that the transaction has failed.klzzwxh:21101klzzwxh:21032klzzwxh:21033klzzwxh:21034klzzwxh:21035klzzwxh:21036klzzwxh:21037klzzwxh:21038klzzwxh:21039klzzwxh:21040klzzwxh:21041klzzwxh:21042 klzzwxh:20978timedOut = true;klzzwxh:21102klzzwxh:21043klzzwxh:21044klzzwxh:21045klzzwxh:21046klzzwxh:21047klzzwxh:21048klzzwxh:21049klzzwxh:21050klzzwxh:21051klzzwxh:21052klzzwxh:21053 try klzzwxh:20979klzzwxh:21103klzzwxh:21054klzzwxh:21055klzzwxh:21056klzzwxh:21057klzzwxh:21058klzzwxh:21059klzzwxh:21060klzzwxh:21061klzzwxh:21062klzzwxh:21063klzzwxh:21064klzzwxh:21065klzzwxh:21066klzzwxh:21067klzzwxh:21068 rollbackklzzwxh:20980klzzwxh:20981;klzzwxh:21104klzzwxh:21069klzzwxh:21070klzzwxh:21071klzzwxh:21072klzzwxh:21073klzzwxh:21074klzzwxh:21075klzzwxh:21076klzzwxh:21077klzzwxh:21078klzzwxh:21079 klzzwxh:20982 catch klzzwxh:20983 Exception except klzzwxh:20984 klzzwxh:20985 klzzwxh:20986klzzwxh:21105klzzwxh:21080klzzwxh:21081klzzwxh:21082klzzwxh:21083klzzwxh:21084klzzwxh:21085klzzwxh:21086 klzzwxh:20987klzzwxh:21106klzzwxh:21087klzzwxh:21088klzzwxh:21089 klzzwxh:20988klzzwxh:21107klzzwxh:21090klzzwxh:21091klzzwxh:21092

klzzwxh:21117klzzwxh:21118klzzwxh:21119 /klzzwxh:21108klzzwxh:21109klzzwxh:21144klzzwxh:21120klzzwxh:21121klzzwxh:21122klzzwxh:21123 klzzwxh:21110 Returns true if the transaction has timed out and rolled back.klzzwxh:21145klzzwxh:21124klzzwxh:21125klzzwxh:21126klzzwxh:21127 klzzwxh:21111/klzzwxh:21146klzzwxh:21128klzzwxh:21129klzzwxh:21130 protected boolean getTimedOutklzzwxh:21112klzzwxh:21113klzzwxh:21147klzzwxh:21131klzzwxh:21132klzzwxh:21133 klzzwxh:21114klzzwxh:21148klzzwxh:21134klzzwxh:21135klzzwxh:21136klzzwxh:21137klzzwxh:21138klzzwxh:21139klzzwxh:21140 return klzzwxh:21115timedOut;klzzwxh:21149klzzwxh:21141klzzwxh:21142klzzwxh:21143 klzzwxh:21116

klzzwxh:21160klzzwxh:21161klzzwxh:21162 /klzzwxh:21150klzzwxh:21151klzzwxh:21191klzzwxh:21163klzzwxh:21164klzzwxh:21165klzzwxh:21166 klzzwxh:21152 Returns the propagation context used to import thisklzzwxh:21192klzzwxh:21167klzzwxh:21168klzzwxh:21169klzzwxh:21170 klzzwxh:21153 transaction or null if the transaction was not imported.klzzwxh:21193klzzwxh:21171klzzwxh:21172klzzwxh:21173klzzwxh:21174 klzzwxh:21154/klzzwxh:21194klzzwxh:21175klzzwxh:21176klzzwxh:21177 protected PropagationContext getPropagationContextklzzwxh:21155klzzwxh:21156klzzwxh:21195klzzwxh:21178klzzwxh:21179klzzwxh:21180 klzzwxh:21157klzzwxh:21196klzzwxh:21181klzzwxh:21182klzzwxh:21183klzzwxh:21184klzzwxh:21185klzzwxh:21186klzzwxh:21187 return klzzwxh:21158pgContext;klzzwxh:21197klzzwxh:21188klzzwxh:21189klzzwxh:21190 klzzwxh:21159

klzzwxh:21214klzzwxh:21215klzzwxh:21216 /klzzwxh:21198klzzwxh:21199klzzwxh:21295klzzwxh:21217klzzwxh:21218klzzwxh:21219klzzwxh:21220 klzzwxh:21200 Returns a listing of the resources associated with thisklzzwxh:21296klzzwxh:21221klzzwxh:21222klzzwxh:21223klzzwxh:21224 klzzwxh:21201 transaction. Provides an identification of all the XAklzzwxh:21297klzzwxh:21225klzzwxh:21226klzzwxh:21227klzzwxh:21228 klzzwxh:21202 resources, OTS resources and subtransactions.klzzwxh:21298klzzwxh:21229klzzwxh:21230klzzwxh:21231klzzwxh:21232 klzzwxh:21203klzzwxh:21299klzzwxh:21233klzzwxh:21234klzzwxh:21235klzzwxh:21236 klzzwxh:21204 @return Array of description of all resources enlistedklzzwxh:21300klzzwxh:21237klzzwxh:21238klzzwxh:21239klzzwxh:21240 klzzwxh:21205klzzwxh:21241klzzwxh:21242 with this transactionklzzwxh:21301klzzwxh:21243klzzwxh:21244klzzwxh:21245klzzwxh:21246 klzzwxh:21206/klzzwxh:21302klzzwxh:21247klzzwxh:21248klzzwxh:21249 protected synchronized Stringklzzwxh:21207klzzwxh:21208 listResourcesklzzwxh:21209klzzwxh:21210klzzwxh:21303klzzwxh:21250klzzwxh:21251klzzwxh:21252 klzzwxh:21211klzzwxh:21304klzzwxh:21253klzzwxh:21254klzzwxh:21255klzzwxh:21256klzzwxh:21257klzzwxh:21258klzzwxh:21259 Stringklzzwxh:21212klzzwxh:21213klzzwxh:21260klzzwxh:21261klzzwxh:21262klzzwxh:21263klzzwxh:21264klzzwxh:21265klzzwxh:21266klzzwxh:21267 resList;klzzwxh:21305klzzwxh:21268klzzwxh:21269klzzwxh:21270klzzwxh:21271klzzwxh:21272klzzwxh:21273klzzwxh:21274 InternalXAResourceHolder resHolder;klzzwxh:21306klzzwxh:21275klzzwxh:21276klzzwxh:21277klzzwxh:21278klzzwxh:21279klzzwxh:21280klzzwxh:21281 intklzzwxh:21282klzzwxh:21283klzzwxh:21284klzzwxh:21285klzzwxh:21286klzzwxh:21287klzzwxh:21288klzzwxh:21289klzzwxh:21290klzzwxh:21291klzzwxh:21292klzzwxh:21293klzzwxh:21294 index;

klzzwxh:21365klzzwxh:21366klzzwxh:21367klzzwxh:21368klzzwxh:21369klzzwxh:21370klzzwxh:21371 resHolder = klzzwxh:21307enlisted;klzzwxh:21601klzzwxh:21372klzzwxh:21373klzzwxh:21374klzzwxh:21375klzzwxh:21376klzzwxh:21377klzzwxh:21378 for klzzwxh:21308 index = 0 ; resHolder klzzwxh:21309= null ; ++index klzzwxh:21310klzzwxh:21602klzzwxh:21379klzzwxh:21380klzzwxh:21381klzzwxh:21382klzzwxh:21383klzzwxh:21384klzzwxh:21385klzzwxh:21386klzzwxh:21387klzzwxh:21388klzzwxh:21389 resHolder = resHolder.klzzwxh:21311nextHolder;klzzwxh:21603klzzwxh:21390klzzwxh:21391klzzwxh:21392klzzwxh:21393klzzwxh:21394klzzwxh:21395klzzwxh:21396 resList = new Stringklzzwxh:21312 index + klzzwxh:21313 klzzwxh:21314resources == null ? 0 : klzzwxh:21315resources.length klzzwxh:21316 klzzwxh:21317;klzzwxh:21604klzzwxh:21397klzzwxh:21398klzzwxh:21399klzzwxh:21400klzzwxh:21401klzzwxh:21402klzzwxh:21403 klzzwxh:21605klzzwxh:21404klzzwxh:21405klzzwxh:21406klzzwxh:21407klzzwxh:21408klzzwxh:21409klzzwxh:21410 resHolder = klzzwxh:21318enlisted;klzzwxh:21606klzzwxh:21411klzzwxh:21412klzzwxh:21413klzzwxh:21414klzzwxh:21415klzzwxh:21416klzzwxh:21417 for klzzwxh:21319 index = 0 ; resHolder klzzwxh:21320= null ; ++index klzzwxh:21321 klzzwxh:21322klzzwxh:21607klzzwxh:21418klzzwxh:21419klzzwxh:21420klzzwxh:21421klzzwxh:21422klzzwxh:21423klzzwxh:21424klzzwxh:21425klzzwxh:21426klzzwxh:21427klzzwxh:21428 resListklzzwxh:21323 index klzzwxh:21324 = resHolder.klzzwxh:21325xaResource.toStringklzzwxh:21326klzzwxh:21327;klzzwxh:21608klzzwxh:21429klzzwxh:21430klzzwxh:21431klzzwxh:21432klzzwxh:21433klzzwxh:21434klzzwxh:21435klzzwxh:21436klzzwxh:21437klzzwxh:21438klzzwxh:21439 if klzzwxh:21328 resHolder.klzzwxh:21329endFlag klzzwxh:21330= XAResource.TMNOFLAGS klzzwxh:21331klzzwxh:21609klzzwxh:21440klzzwxh:21441klzzwxh:21442klzzwxh:21443klzzwxh:21444klzzwxh:21445klzzwxh:21446klzzwxh:21447klzzwxh:21448klzzwxh:21449klzzwxh:21450klzzwxh:21451klzzwxh:21452klzzwxh:21453klzzwxh:21454 resListklzzwxh:21332 index klzzwxh:21333 =klzzwxh:21455 resListklzzwxh:21334 index klzzwxh:21335 +klzzwxh:21456 klzzwxh:21457klzzwxh:21336klzzwxh:21458 + klzzwxh:21610klzzwxh:21459klzzwxh:21460klzzwxh:21461klzzwxh:21462klzzwxh:21463klzzwxh:21464klzzwxh:21465klzzwxh:21466klzzwxh:21467klzzwxh:21468klzzwxh:21469klzzwxh:21470klzzwxh:21471klzzwxh:21472klzzwxh:21473klzzwxh:21474klzzwxh:21475klzzwxh:21476klzzwxh:21477 klzzwxh:21337 klzzwxh:21338 resHolder.klzzwxh:21339endFlag == XAResource.TMSUSPEND ? klzzwxh:21478suspendedklzzwxh:21479 klzzwxh:21611klzzwxh:21480klzzwxh:21481klzzwxh:21482klzzwxh:21483klzzwxh:21484klzzwxh:21485klzzwxh:21486klzzwxh:21487klzzwxh:21488klzzwxh:21489klzzwxh:21490klzzwxh:21491klzzwxh:21492klzzwxh:21493klzzwxh:21494klzzwxh:21495klzzwxh:21496klzzwxh:21497klzzwxh:21498klzzwxh:21499klzzwxh:21500klzzwxh:21501klzzwxh:21502 : klzzwxh:21340 resHolder.klzzwxh:21341endFlag == XAResource.TMSUCCESS ? klzzwxh:21503endedklzzwxh:21504 : klzzwxh:21505failedklzzwxh:21506 klzzwxh:21342 klzzwxh:21343 klzzwxh:21344 +klzzwxh:21507 klzzwxh:21508klzzwxh:21345klzzwxh:21509;klzzwxh:21612klzzwxh:21510klzzwxh:21511klzzwxh:21512klzzwxh:21513klzzwxh:21514klzzwxh:21515klzzwxh:21516klzzwxh:21517klzzwxh:21518klzzwxh:21519klzzwxh:21520 resHolder = resHolder.klzzwxh:21346nextHolder;klzzwxh:21613klzzwxh:21521klzzwxh:21522klzzwxh:21523klzzwxh:21524klzzwxh:21525klzzwxh:21526klzzwxh:21527 klzzwxh:21347klzzwxh:21614klzzwxh:21528klzzwxh:21529klzzwxh:21530klzzwxh:21531klzzwxh:21532klzzwxh:21533klzzwxh:21534 if klzzwxh:21348 klzzwxh:21349resources klzzwxh:21350= null klzzwxh:21351klzzwxh:21615klzzwxh:21535klzzwxh:21536klzzwxh:21537klzzwxh:21538klzzwxh:21539klzzwxh:21540klzzwxh:21541klzzwxh:21542klzzwxh:21543klzzwxh:21544klzzwxh:21545 for klzzwxh:21352 int i = klzzwxh:21353resources.length ; i-- klzzwxh:21546 0 ; klzzwxh:21354 klzzwxh:21355klzzwxh:21616klzzwxh:21547klzzwxh:21548klzzwxh:21549klzzwxh:21550klzzwxh:21551klzzwxh:21552klzzwxh:21553klzzwxh:21554klzzwxh:21555klzzwxh:21556klzzwxh:21557klzzwxh:21558klzzwxh:21559klzzwxh:21560klzzwxh:21561 resListklzzwxh:21356 index klzzwxh:21357 = klzzwxh:21358resourcesklzzwxh:21359 i klzzwxh:21360.toStringklzzwxh:21361klzzwxh:21362;klzzwxh:21617klzzwxh:21562klzzwxh:21563klzzwxh:21564klzzwxh:21565klzzwxh:21566klzzwxh:21567klzzwxh:21568klzzwxh:21569klzzwxh:21570klzzwxh:21571klzzwxh:21572klzzwxh:21573klzzwxh:21574klzzwxh:21575klzzwxh:21576 ++index;klzzwxh:21618klzzwxh:21577klzzwxh:21578klzzwxh:21579klzzwxh:21580klzzwxh:21581klzzwxh:21582klzzwxh:21583klzzwxh:21584klzzwxh:21585klzzwxh:21586klzzwxh:21587 klzzwxh:21363klzzwxh:21619klzzwxh:21588klzzwxh:21589klzzwxh:21590klzzwxh:21591klzzwxh:21592klzzwxh:21593klzzwxh:21594 return resList;klzzwxh:21620klzzwxh:21595klzzwxh:21596klzzwxh:21597 klzzwxh:21364klzzwxh:21621klzzwxh:21598klzzwxh:21599klzzwxh:21600

klzzwxh:21720klzzwxh:21721klzzwxh:21722 /klzzwxh:21622klzzwxh:21623klzzwxh:22260klzzwxh:21723klzzwxh:21724klzzwxh:21725klzzwxh:21726 klzzwxh:21624 Called to end the resources as part of the one phase commit protocol.klzzwxh:22261klzzwxh:21727klzzwxh:21728klzzwxh:21729klzzwxh:21730 klzzwxh:21625 On entry the status must be either klzzwxh:21626@link klzzwxh:21627STATUSklzzwxh:21628ACTIVEklzzwxh:21629 or klzzwxh:21630@linkklzzwxh:22262klzzwxh:21731klzzwxh:21732klzzwxh:21733klzzwxh:21734 klzzwxh:21631 klzzwxh:21632STATUSklzzwxh:21633MARKEDklzzwxh:21634ROLLBACKklzzwxh:21635.klzzwxh:22263klzzwxh:21735klzzwxh:21736klzzwxh:21737klzzwxh:21738 klzzwxh:21636 klzzwxh:21739pklzzwxh:21740klzzwxh:22264klzzwxh:21741klzzwxh:21742klzzwxh:21743klzzwxh:21744 klzzwxh:21637 The heuristic decision can be any of the following:klzzwxh:22265klzzwxh:21745klzzwxh:21746klzzwxh:21747klzzwxh:21748 klzzwxh:21638 klzzwxh:21749ulklzzwxh:21750klzzwxh:22266klzzwxh:21751klzzwxh:21752klzzwxh:21753klzzwxh:21754 klzzwxh:21639 klzzwxh:21755liklzzwxh:21756klzzwxh:21640@link klzzwxh:21641Heuristic.COMMITklzzwxh:21642 All resources are ended successfullyklzzwxh:22267klzzwxh:21757klzzwxh:21758klzzwxh:21759klzzwxh:21760 klzzwxh:21643 need to be commited using one phase commit on the resources.klzzwxh:22268klzzwxh:21761klzzwxh:21762klzzwxh:21763klzzwxh:21764 klzzwxh:21644 klzzwxh:21765liklzzwxh:21766klzzwxh:21645@link klzzwxh:21646Heuristic.ROLLBACKklzzwxh:21647 The transaction has been marked forklzzwxh:22269klzzwxh:21767klzzwxh:21768klzzwxh:21769klzzwxh:21770 klzzwxh:21648 rollback, an error has occured or at least one resource failed toklzzwxh:22270klzzwxh:21771klzzwxh:21772klzzwxh:21773klzzwxh:21774 klzzwxh:21649 endklzzwxh:22271klzzwxh:21775klzzwxh:21776klzzwxh:21777klzzwxh:21778 klzzwxh:21650 klzzwxh:21779/ulklzzwxh:21780klzzwxh:22272klzzwxh:21781klzzwxh:21782klzzwxh:21783klzzwxh:21784 klzzwxh:21651klzzwxh:22273klzzwxh:21785klzzwxh:21786klzzwxh:21787klzzwxh:21788 klzzwxh:21652 @throws IllegalStateException The transaction is not active orklzzwxh:22274klzzwxh:21789klzzwxh:21790klzzwxh:21791klzzwxh:21792 klzzwxh:21653 is in the process of being commited, or prepared for two phase commit.klzzwxh:22275klzzwxh:21793klzzwxh:21794klzzwxh:21795klzzwxh:21796 klzzwxh:21654/klzzwxh:22276klzzwxh:21797klzzwxh:21798klzzwxh:21799 protected void endResourcesklzzwxh:21655klzzwxh:21656klzzwxh:22277klzzwxh:21800klzzwxh:21801klzzwxh:21802klzzwxh:21803klzzwxh:21804klzzwxh:21805klzzwxh:21806 throws IllegalStateException, RollbackExceptionklzzwxh:22278klzzwxh:21807klzzwxh:21808klzzwxh:21809 klzzwxh:21657klzzwxh:22279klzzwxh:21810klzzwxh:21811klzzwxh:21812klzzwxh:21813klzzwxh:21814klzzwxh:21815klzzwxh:21816 intklzzwxh:21817klzzwxh:21818klzzwxh:21819klzzwxh:21820klzzwxh:21821klzzwxh:21822klzzwxh:21823klzzwxh:21824 committing;klzzwxh:22280klzzwxh:21825klzzwxh:21826klzzwxh:21827klzzwxh:21828klzzwxh:21829klzzwxh:21830klzzwxh:21831 Resourceklzzwxh:21832klzzwxh:21833klzzwxh:21834 resource;klzzwxh:22281klzzwxh:21835klzzwxh:21836klzzwxh:21837 klzzwxh:22282klzzwxh:21838klzzwxh:21839klzzwxh:21840klzzwxh:21841klzzwxh:21842klzzwxh:21843klzzwxh:21844 // Proper notification for transactions that timed out.klzzwxh:22283klzzwxh:21845klzzwxh:21846klzzwxh:21847klzzwxh:21848klzzwxh:21849klzzwxh:21850klzzwxh:21851 if klzzwxh:21658 klzzwxh:21659timedOut klzzwxh:21660klzzwxh:22284klzzwxh:21852klzzwxh:21853klzzwxh:21854klzzwxh:21855klzzwxh:21856klzzwxh:21857klzzwxh:21858klzzwxh:21859klzzwxh:21860klzzwxh:21861klzzwxh:21862 throw new RollbackExceptionklzzwxh:21661 Messages.messageklzzwxh:21662 klzzwxh:21863tyrex.tx.timedOutklzzwxh:21864 klzzwxh:21663 klzzwxh:21664;klzzwxh:22285klzzwxh:21865klzzwxh:21866klzzwxh:21867klzzwxh:21868klzzwxh:21869klzzwxh:21870klzzwxh:21871 klzzwxh:22286klzzwxh:21872klzzwxh:21873klzzwxh:21874klzzwxh:21875klzzwxh:21876klzzwxh:21877klzzwxh:21878 // Check the status of the transaction and act accordingly.klzzwxh:22287klzzwxh:21879klzzwxh:21880klzzwxh:21881klzzwxh:21882klzzwxh:21883klzzwxh:21884klzzwxh:21885 switch klzzwxh:21665 klzzwxh:21666status klzzwxh:21667 klzzwxh:21668klzzwxh:22288klzzwxh:21886klzzwxh:21887klzzwxh:21888klzzwxh:21889klzzwxh:21890klzzwxh:21891klzzwxh:21892 case STATUSklzzwxh:21669ACTIVE:klzzwxh:22289klzzwxh:21893klzzwxh:21894klzzwxh:21895klzzwxh:21896klzzwxh:21897klzzwxh:21898klzzwxh:21899klzzwxh:21900klzzwxh:21901klzzwxh:21902klzzwxh:21903 // Transaction is active, we'll commit it.klzzwxh:22290klzzwxh:21904klzzwxh:21905klzzwxh:21906klzzwxh:21907klzzwxh:21908klzzwxh:21909klzzwxh:21910klzzwxh:21911klzzwxh:21912klzzwxh:21913klzzwxh:21914 break;klzzwxh:22291klzzwxh:21915klzzwxh:21916klzzwxh:21917klzzwxh:21918klzzwxh:21919klzzwxh:21920klzzwxh:21921 case STATUSklzzwxh:21670PREPARED:klzzwxh:22292klzzwxh:21922klzzwxh:21923klzzwxh:21924klzzwxh:21925klzzwxh:21926klzzwxh:21927klzzwxh:21928klzzwxh:21929klzzwxh:21930klzzwxh:21931klzzwxh:21932 // logic error by userklzzwxh:22293klzzwxh:21933klzzwxh:21934klzzwxh:21935klzzwxh:21936klzzwxh:21937klzzwxh:21938klzzwxh:21939klzzwxh:21940klzzwxh:21941klzzwxh:21942klzzwxh:21943 throw new IllegalStateExceptionklzzwxh:21671 Messages.messageklzzwxh:21672 klzzwxh:21944tyrex.tx.inOnePhaseCommitklzzwxh:21945 klzzwxh:21673 klzzwxh:21674;klzzwxh:22294klzzwxh:21946klzzwxh:21947klzzwxh:21948klzzwxh:21949klzzwxh:21950klzzwxh:21951klzzwxh:21952 case STATUSklzzwxh:21675COMMITTING:klzzwxh:22295klzzwxh:21953klzzwxh:21954klzzwxh:21955klzzwxh:21956klzzwxh:21957klzzwxh:21958klzzwxh:21959 case STATUSklzzwxh:21676PREPARING:klzzwxh:22296klzzwxh:21960klzzwxh:21961klzzwxh:21962klzzwxh:21963klzzwxh:21964klzzwxh:21965klzzwxh:21966klzzwxh:21967klzzwxh:21968klzzwxh:21969klzzwxh:21970 // Transaction is in the middle of being commited.klzzwxh:22297klzzwxh:21971klzzwxh:21972klzzwxh:21973klzzwxh:21974klzzwxh:21975klzzwxh:21976klzzwxh:21977klzzwxh:21978klzzwxh:21979klzzwxh:21980klzzwxh:21981 throw new IllegalStateExceptionklzzwxh:21677 Messages.messageklzzwxh:21678 klzzwxh:21982tyrex.tx.inCommitklzzwxh:21983 klzzwxh:21679 klzzwxh:21680;klzzwxh:22298klzzwxh:21984klzzwxh:21985klzzwxh:21986klzzwxh:21987klzzwxh:21988klzzwxh:21989klzzwxh:21990 case STATUSklzzwxh:21681MARKEDklzzwxh:21682ROLLBACK:klzzwxh:22299klzzwxh:21991klzzwxh:21992klzzwxh:21993klzzwxh:21994klzzwxh:21995klzzwxh:21996klzzwxh:21997klzzwxh:21998klzzwxh:21999klzzwxh:22000klzzwxh:22001 // Transaction has been marked for roll-back, no preparationklzzwxh:22300klzzwxh:22002klzzwxh:22003klzzwxh:22004klzzwxh:22005klzzwxh:22006klzzwxh:22007klzzwxh:22008klzzwxh:22009klzzwxh:22010klzzwxh:22011klzzwxh:22012 // necessary.klzzwxh:22301klzzwxh:22013klzzwxh:22014klzzwxh:22015klzzwxh:22016klzzwxh:22017klzzwxh:22018klzzwxh:22019klzzwxh:22020klzzwxh:22021klzzwxh:22022klzzwxh:22023 klzzwxh:21683heuristic = Heuristic.ROLLBACK;klzzwxh:22302klzzwxh:22024klzzwxh:22025klzzwxh:22026klzzwxh:22027klzzwxh:22028klzzwxh:22029klzzwxh:22030klzzwxh:22031klzzwxh:22032klzzwxh:22033klzzwxh:22034 return;klzzwxh:22303klzzwxh:22035klzzwxh:22036klzzwxh:22037klzzwxh:22038klzzwxh:22039klzzwxh:22040klzzwxh:22041 case STATUSklzzwxh:21684ROLLEDBACK:klzzwxh:22304klzzwxh:22042klzzwxh:22043klzzwxh:22044klzzwxh:22045klzzwxh:22046klzzwxh:22047klzzwxh:22048klzzwxh:22049klzzwxh:22050klzzwxh:22051klzzwxh:22052 // Transaction has been or is being rolled back.klzzwxh:22305klzzwxh:22053klzzwxh:22054klzzwxh:22055klzzwxh:22056klzzwxh:22057klzzwxh:22058klzzwxh:22059klzzwxh:22060klzzwxh:22061klzzwxh:22062klzzwxh:22063 throw new RollbackExceptionklzzwxh:21685 Messages.messageklzzwxh:21686 klzzwxh:22064tyrex.tx.rolledbackklzzwxh:22065 klzzwxh:21687 klzzwxh:21688;klzzwxh:22306klzzwxh:22066klzzwxh:22067klzzwxh:22068klzzwxh:22069klzzwxh:22070klzzwxh:22071klzzwxh:22072 case STATUSklzzwxh:21689ROLLINGklzzwxh:21690BACK:klzzwxh:22307klzzwxh:22073klzzwxh:22074klzzwxh:22075klzzwxh:22076klzzwxh:22077klzzwxh:22078klzzwxh:22079klzzwxh:22080klzzwxh:22081klzzwxh:22082klzzwxh:22083 // Transaction has been or is being rolled back.klzzwxh:22308klzzwxh:22084klzzwxh:22085klzzwxh:22086klzzwxh:22087klzzwxh:22088klzzwxh:22089klzzwxh:22090klzzwxh:22091klzzwxh:22092klzzwxh:22093klzzwxh:22094 throw new IllegalStateExceptionklzzwxh:21691 Messages.messageklzzwxh:21692 klzzwxh:22095tyrex.tx.inRollbackklzzwxh:22096 klzzwxh:21693 klzzwxh:21694;klzzwxh:22309klzzwxh:22097klzzwxh:22098klzzwxh:22099klzzwxh:22100klzzwxh:22101klzzwxh:22102klzzwxh:22103 case STATUSklzzwxh:21695COMMITTED:klzzwxh:22310klzzwxh:22104klzzwxh:22105klzzwxh:22106klzzwxh:22107klzzwxh:22108klzzwxh:22109klzzwxh:22110 case STATUSklzzwxh:21696NOklzzwxh:21697TRANSACTION:klzzwxh:22311klzzwxh:22111klzzwxh:22112klzzwxh:22113klzzwxh:22114klzzwxh:22115klzzwxh:22116klzzwxh:22117 case STATUSklzzwxh:21698UNKNOWN:klzzwxh:22312klzzwxh:22118klzzwxh:22119klzzwxh:22120klzzwxh:22121klzzwxh:22122klzzwxh:22123klzzwxh:22124 default:klzzwxh:22313klzzwxh:22125klzzwxh:22126klzzwxh:22127klzzwxh:22128klzzwxh:22129klzzwxh:22130klzzwxh:22131klzzwxh:22132klzzwxh:22133klzzwxh:22134klzzwxh:22135 throw new IllegalStateExceptionklzzwxh:21699 Messages.messageklzzwxh:21700 klzzwxh:22136tyrex.tx.inactiveklzzwxh:22137 klzzwxh:21701 klzzwxh:21702;klzzwxh:22314klzzwxh:22138klzzwxh:22139klzzwxh:22140klzzwxh:22141klzzwxh:22142klzzwxh:22143klzzwxh:22144 klzzwxh:21703klzzwxh:22315klzzwxh:22145klzzwxh:22146klzzwxh:22147 klzzwxh:22316klzzwxh:22148klzzwxh:22149klzzwxh:22150klzzwxh:22151klzzwxh:22152klzzwxh:22153klzzwxh:22154 // Call before completion on all the registered synchronizations.klzzwxh:22317klzzwxh:22155klzzwxh:22156klzzwxh:22157klzzwxh:22158klzzwxh:22159klzzwxh:22160klzzwxh:22161 // This happens before the transaction enters the PREPARED state,klzzwxh:22318klzzwxh:22162klzzwxh:22163klzzwxh:22164klzzwxh:22165klzzwxh:22166klzzwxh:22167klzzwxh:22168 // so synchronizations can enlist new XA/OTS resources. This callklzzwxh:22319klzzwxh:22169klzzwxh:22170klzzwxh:22171klzzwxh:22172klzzwxh:22173klzzwxh:22174klzzwxh:22175 // may affect the outcome of the transaction and cause it to beklzzwxh:22320klzzwxh:22176klzzwxh:22177klzzwxh:22178klzzwxh:22179klzzwxh:22180klzzwxh:22181klzzwxh:22182 // marked as rollback-only.klzzwxh:22321klzzwxh:22183klzzwxh:22184klzzwxh:22185klzzwxh:22186klzzwxh:22187klzzwxh:22188klzzwxh:22189 if klzzwxh:21704 klzzwxh:21705syncs klzzwxh:21706= null klzzwxh:21707 klzzwxh:21708klzzwxh:22322klzzwxh:22190klzzwxh:22191klzzwxh:22192klzzwxh:22193klzzwxh:22194klzzwxh:22195klzzwxh:22196klzzwxh:22197klzzwxh:22198klzzwxh:22199klzzwxh:22200 beforeCompletionklzzwxh:21709klzzwxh:21710;klzzwxh:22323klzzwxh:22201klzzwxh:22202klzzwxh:22203klzzwxh:22204klzzwxh:22205klzzwxh:22206klzzwxh:22207klzzwxh:22208klzzwxh:22209klzzwxh:22210klzzwxh:22211 if klzzwxh:21711 klzzwxh:21712status == STATUSklzzwxh:21713MARKEDklzzwxh:21714ROLLBACK klzzwxh:21715 klzzwxh:21716klzzwxh:22324klzzwxh:22212klzzwxh:22213klzzwxh:22214klzzwxh:22215klzzwxh:22216klzzwxh:22217klzzwxh:22218klzzwxh:22219klzzwxh:22220klzzwxh:22221klzzwxh:22222klzzwxh:22223klzzwxh:22224klzzwxh:22225klzzwxh:22226 klzzwxh:21717heuristic = Heuristic.ROLLBACK;klzzwxh:22325klzzwxh:22227klzzwxh:22228klzzwxh:22229klzzwxh:22230klzzwxh:22231klzzwxh:22232klzzwxh:22233klzzwxh:22234klzzwxh:22235klzzwxh:22236klzzwxh:22237klzzwxh:22238klzzwxh:22239klzzwxh:22240klzzwxh:22241 return;klzzwxh:22326klzzwxh:22242klzzwxh:22243klzzwxh:22244klzzwxh:22245klzzwxh:22246klzzwxh:22247klzzwxh:22248klzzwxh:22249klzzwxh:22250klzzwxh:22251klzzwxh:22252 klzzwxh:21718klzzwxh:22327klzzwxh:22253klzzwxh:22254klzzwxh:22255klzzwxh:22256klzzwxh:22257klzzwxh:22258klzzwxh:22259 klzzwxh:21719

klzzwxh:22337klzzwxh:22338klzzwxh:22339klzzwxh:22340klzzwxh:22341klzzwxh:22342klzzwxh:22343 // We begin by having no heuristics at all, but duringklzzwxh:22410klzzwxh:22344klzzwxh:22345klzzwxh:22346klzzwxh:22347klzzwxh:22348klzzwxh:22349klzzwxh:22350 // the process we might reach a conclusion to have aklzzwxh:22411klzzwxh:22351klzzwxh:22352klzzwxh:22353klzzwxh:22354klzzwxh:22355klzzwxh:22356klzzwxh:22357 // commit or rollback heuristic.klzzwxh:22412klzzwxh:22358klzzwxh:22359klzzwxh:22360klzzwxh:22361klzzwxh:22362klzzwxh:22363klzzwxh:22364 klzzwxh:22328status = STATUSklzzwxh:22329COMMITTING;klzzwxh:22413klzzwxh:22365klzzwxh:22366klzzwxh:22367klzzwxh:22368klzzwxh:22369klzzwxh:22370klzzwxh:22371 klzzwxh:22330heuristic = Heuristic.READONLY;klzzwxh:22414klzzwxh:22372klzzwxh:22373klzzwxh:22374klzzwxh:22375klzzwxh:22376klzzwxh:22377 klzzwxh:22415klzzwxh:22378klzzwxh:22379klzzwxh:22380klzzwxh:22381klzzwxh:22382klzzwxh:22383klzzwxh:22384 // We always end these resources, even if we made a heuristicklzzwxh:22416klzzwxh:22385klzzwxh:22386klzzwxh:22387klzzwxh:22388klzzwxh:22389klzzwxh:22390klzzwxh:22391 // decision not to commit this transaction.klzzwxh:22417klzzwxh:22392klzzwxh:22393klzzwxh:22394klzzwxh:22395klzzwxh:22396klzzwxh:22397klzzwxh:22398 if klzzwxh:22331 klzzwxh:22332enlisted klzzwxh:22333= null klzzwxh:22334klzzwxh:22418klzzwxh:22399klzzwxh:22400klzzwxh:22401klzzwxh:22402klzzwxh:22403klzzwxh:22404klzzwxh:22405klzzwxh:22406klzzwxh:22407klzzwxh:22408klzzwxh:22409 endEnlistedResourcesForCommitklzzwxh:22335klzzwxh:22336;

klzzwxh:22557klzzwxh:22558klzzwxh:22559klzzwxh:22560klzzwxh:22561klzzwxh:22562klzzwxh:22563 // if the heuristic has not changed set it to commitklzzwxh:23393klzzwxh:22564klzzwxh:22565klzzwxh:22566klzzwxh:22567klzzwxh:22568klzzwxh:22569klzzwxh:22570 if klzzwxh:22419 klzzwxh:22420heuristic == Heuristic.READONLY klzzwxh:22421klzzwxh:23394klzzwxh:22571klzzwxh:22572klzzwxh:22573klzzwxh:22574klzzwxh:22575klzzwxh:22576klzzwxh:22577klzzwxh:22578klzzwxh:22579klzzwxh:22580klzzwxh:22581 klzzwxh:22422heuristic = Heuristic.COMMIT;klzzwxh:22582klzzwxh:22583klzzwxh:22584 klzzwxh:23395klzzwxh:22585klzzwxh:22586klzzwxh:22587klzzwxh:22588klzzwxh:22589klzzwxh:22590klzzwxh:22591 elseklzzwxh:23396klzzwxh:22592klzzwxh:22593klzzwxh:22594klzzwxh:22595klzzwxh:22596klzzwxh:22597klzzwxh:22598klzzwxh:22599klzzwxh:22600klzzwxh:22601klzzwxh:22602 klzzwxh:22423heuristic = normalizeklzzwxh:22424 klzzwxh:22425heuristic klzzwxh:22426;klzzwxh:23397klzzwxh:22603klzzwxh:22604klzzwxh:22605 klzzwxh:22427klzzwxh:23398klzzwxh:22606klzzwxh:22607klzzwxh:22608 klzzwxh:23399klzzwxh:22609klzzwxh:22610klzzwxh:22611 klzzwxh:23400klzzwxh:22612klzzwxh:22613klzzwxh:22614 /klzzwxh:22428klzzwxh:22429klzzwxh:23401klzzwxh:22615klzzwxh:22616klzzwxh:22617klzzwxh:22618 klzzwxh:22430 Called to forget about the transaction at the end of eitherklzzwxh:23402klzzwxh:22619klzzwxh:22620klzzwxh:22621klzzwxh:22622 klzzwxh:22431 a commit or rollback. This method servers three purposes.klzzwxh:23403klzzwxh:22623klzzwxh:22624klzzwxh:22625klzzwxh:22626 klzzwxh:22432 First, it will tell all the resources to forget about theklzzwxh:23404klzzwxh:22627klzzwxh:22628klzzwxh:22629klzzwxh:22630 klzzwxh:22433 transaction and release them if the appropriate heuristic klzzwxh:23405klzzwxh:22631klzzwxh:22632klzzwxh:22633klzzwxh:22634 klzzwxh:22434 exception occurred. Second, it will notify allklzzwxh:23406klzzwxh:22635klzzwxh:22636klzzwxh:22637klzzwxh:22638 klzzwxh:22435 the synchronziation objects that the transaction has completedklzzwxh:23407klzzwxh:22639klzzwxh:22640klzzwxh:22641klzzwxh:22642 klzzwxh:22436 with the transaction's status. Last, it will release anyklzzwxh:23408klzzwxh:22643klzzwxh:22644klzzwxh:22645klzzwxh:22646 klzzwxh:22437 objects held by the transaction and dissocaite it from theklzzwxh:23409klzzwxh:22647klzzwxh:22648klzzwxh:22649klzzwxh:22650 klzzwxh:22438 list of available transactions.klzzwxh:23410klzzwxh:22651klzzwxh:22652klzzwxh:22653klzzwxh:22654 klzzwxh:22439 klzzwxh:22655Pklzzwxh:22656klzzwxh:23411klzzwxh:22657klzzwxh:22658klzzwxh:22659klzzwxh:22660 klzzwxh:22440 The klzzwxh:22661ttklzzwxh:22662ignoreHeuristicklzzwxh:22663/ttklzzwxh:22664 argument is used to determine whatklzzwxh:23412klzzwxh:22665klzzwxh:22666klzzwxh:22667klzzwxh:22668 klzzwxh:22441 heuristic outcomes cause forget to be called on the resourcesklzzwxh:23413klzzwxh:22669klzzwxh:22670klzzwxh:22671klzzwxh:22672 klzzwxh:22442 associated with the transaction. For instance if transactionklzzwxh:23414klzzwxh:22673klzzwxh:22674klzzwxh:22675klzzwxh:22676 klzzwxh:22443 commit has been called and the outcome is Heuristic.COMMIT thenklzzwxh:23415klzzwxh:22677klzzwxh:22678klzzwxh:22679klzzwxh:22680 klzzwxh:22444 resource forget should be not be called. In this case resourceklzzwxh:23416klzzwxh:22681klzzwxh:22682klzzwxh:22683klzzwxh:22684 klzzwxh:22445 forget should be called on all other heuristic outcomes likeklzzwxh:23417klzzwxh:22685klzzwxh:22686klzzwxh:22687klzzwxh:22688 klzzwxh:22446 Heuristic.ROLLBACK for instance. Similarly if transaction rollbackklzzwxh:23418klzzwxh:22689klzzwxh:22690klzzwxh:22691klzzwxh:22692 klzzwxh:22447 has been called and the outcome is Heuristic.ROLLBACK then resourceklzzwxh:23419klzzwxh:22693klzzwxh:22694klzzwxh:22695klzzwxh:22696 klzzwxh:22448 forget should not be called. In this case resource forget shouldklzzwxh:23420klzzwxh:22697klzzwxh:22698klzzwxh:22699klzzwxh:22700 klzzwxh:22449 be called on all other heuristic outcomes like Heuristic.COMMIT.klzzwxh:23421klzzwxh:22701klzzwxh:22702klzzwxh:22703klzzwxh:22704 klzzwxh:22450 klzzwxh:22705pklzzwxh:22706klzzwxh:23422klzzwxh:22707klzzwxh:22708klzzwxh:22709klzzwxh:22710 klzzwxh:22451 Forget always gets called if we are doing two-phase commit.klzzwxh:23423klzzwxh:22711klzzwxh:22712klzzwxh:22713klzzwxh:22714 klzzwxh:22452 klzzwxh:23424klzzwxh:22715klzzwxh:22716klzzwxh:22717klzzwxh:22718 klzzwxh:22453 @param ignoreHeuristic the heuristic to ignoreklzzwxh:23425klzzwxh:22719klzzwxh:22720klzzwxh:22721klzzwxh:22722 klzzwxh:22454 @throws IllegalStateException The transaction has not commitedklzzwxh:23426klzzwxh:22723klzzwxh:22724klzzwxh:22725klzzwxh:22726 klzzwxh:22455 or rolledback yetklzzwxh:23427klzzwxh:22727klzzwxh:22728klzzwxh:22729klzzwxh:22730 klzzwxh:22456 @see HeuristicExceptionsklzzwxh:23428klzzwxh:22731klzzwxh:22732klzzwxh:22733klzzwxh:22734 klzzwxh:22457/klzzwxh:23429klzzwxh:22735klzzwxh:22736klzzwxh:22737 protected void forgetklzzwxh:22458 int ignoreHeuristic klzzwxh:22459klzzwxh:23430klzzwxh:22738klzzwxh:22739klzzwxh:22740klzzwxh:22741klzzwxh:22742klzzwxh:22743klzzwxh:22744 throws IllegalStateExceptionklzzwxh:23431klzzwxh:22745klzzwxh:22746klzzwxh:22747 klzzwxh:22460klzzwxh:23432klzzwxh:22748klzzwxh:22749klzzwxh:22750klzzwxh:22751klzzwxh:22752klzzwxh:22753klzzwxh:22754 InternalXAResourceHolderklzzwxh:22755klzzwxh:22756 resHolder;klzzwxh:23433klzzwxh:22757klzzwxh:22758klzzwxh:22759klzzwxh:22760klzzwxh:22761klzzwxh:22762klzzwxh:22763 Transactionklzzwxh:22764klzzwxh:22765klzzwxh:22766klzzwxh:22767klzzwxh:22768klzzwxh:22769klzzwxh:22770 suspended;klzzwxh:23434klzzwxh:22771klzzwxh:22772klzzwxh:22773klzzwxh:22774klzzwxh:22775klzzwxh:22776klzzwxh:22777 Resourceklzzwxh:22778klzzwxh:22779klzzwxh:22780klzzwxh:22781klzzwxh:22782klzzwxh:22783klzzwxh:22784klzzwxh:22785klzzwxh:22786klzzwxh:22787 resource;klzzwxh:23435klzzwxh:22788klzzwxh:22789klzzwxh:22790klzzwxh:22791klzzwxh:22792klzzwxh:22793klzzwxh:22794 Synchronizationklzzwxh:22795klzzwxh:22796klzzwxh:22797 sync;klzzwxh:23436klzzwxh:22798klzzwxh:22799klzzwxh:22800klzzwxh:22801klzzwxh:22802klzzwxh:22803klzzwxh:22804 klzzwxh:23437klzzwxh:22805klzzwxh:22806klzzwxh:22807klzzwxh:22808klzzwxh:22809klzzwxh:22810klzzwxh:22811 if klzzwxh:22461 klzzwxh:22462status klzzwxh:22463= STATUSklzzwxh:22464COMMITTED klzzwxh:22812klzzwxh:22813 klzzwxh:22465status klzzwxh:22466= STATUSklzzwxh:22467ROLLEDBACK klzzwxh:22468klzzwxh:23438klzzwxh:22814klzzwxh:22815klzzwxh:22816klzzwxh:22817klzzwxh:22818klzzwxh:22819klzzwxh:22820klzzwxh:22821klzzwxh:22822klzzwxh:22823klzzwxh:22824 throw new IllegalStateExceptionklzzwxh:22469 Messages.messageklzzwxh:22470 klzzwxh:22825tyrex.tx.cannotForgetklzzwxh:22826 klzzwxh:22471 klzzwxh:22472;klzzwxh:23439klzzwxh:22827klzzwxh:22828klzzwxh:22829klzzwxh:22830klzzwxh:22831klzzwxh:22832klzzwxh:22833 klzzwxh:23440klzzwxh:22834klzzwxh:22835klzzwxh:22836klzzwxh:22837klzzwxh:22838klzzwxh:22839klzzwxh:22840 // only forget the resources if a heuristic exception occuredklzzwxh:23441klzzwxh:22841klzzwxh:22842klzzwxh:22843klzzwxh:22844klzzwxh:22845klzzwxh:22846klzzwxh:22847 if klzzwxh:22473 klzzwxh:22474 klzzwxh:22475heuristic klzzwxh:22476= ignoreHeuristic klzzwxh:22848klzzwxh:22849 klzzwxh:22477twoPhase klzzwxh:22478 klzzwxh:22850klzzwxh:22851klzzwxh:23442klzzwxh:22852klzzwxh:22853klzzwxh:22854klzzwxh:22855klzzwxh:22856klzzwxh:22857klzzwxh:22858klzzwxh:22859klzzwxh:22860klzzwxh:22861klzzwxh:22862klzzwxh:22863 klzzwxh:22479 klzzwxh:22480 klzzwxh:22481heuristic == Heuristic.ROLLBACK klzzwxh:22482 ||klzzwxh:23443klzzwxh:22864klzzwxh:22865klzzwxh:22866klzzwxh:22867klzzwxh:22868klzzwxh:22869klzzwxh:22870klzzwxh:22871klzzwxh:22872klzzwxh:22873klzzwxh:22874klzzwxh:22875klzzwxh:22876klzzwxh:22877 klzzwxh:22483 klzzwxh:22484heuristic == Heuristic.COMMIT klzzwxh:22485 ||klzzwxh:23444klzzwxh:22878klzzwxh:22879klzzwxh:22880klzzwxh:22881klzzwxh:22882klzzwxh:22883klzzwxh:22884klzzwxh:22885klzzwxh:22886klzzwxh:22887klzzwxh:22888klzzwxh:22889klzzwxh:22890klzzwxh:22891 klzzwxh:22486 klzzwxh:22487heuristic == Heuristic.MIXED klzzwxh:22488 ||klzzwxh:23445klzzwxh:22892klzzwxh:22893klzzwxh:22894klzzwxh:22895klzzwxh:22896klzzwxh:22897klzzwxh:22898klzzwxh:22899klzzwxh:22900klzzwxh:22901klzzwxh:22902klzzwxh:22903klzzwxh:22904klzzwxh:22905 klzzwxh:22489 klzzwxh:22490heuristic == Heuristic.HAZARD klzzwxh:22491 klzzwxh:22492 klzzwxh:22493 klzzwxh:22494klzzwxh:23446klzzwxh:22906klzzwxh:22907klzzwxh:22908klzzwxh:22909klzzwxh:22910klzzwxh:22911klzzwxh:22912klzzwxh:22913klzzwxh:22914klzzwxh:22915klzzwxh:22916 // Tell all the resources to forget about theirklzzwxh:23447klzzwxh:22917klzzwxh:22918klzzwxh:22919klzzwxh:22920klzzwxh:22921klzzwxh:22922klzzwxh:22923klzzwxh:22924klzzwxh:22925klzzwxh:22926klzzwxh:22927 // transaction. Shared resources do not requireklzzwxh:23448klzzwxh:22928klzzwxh:22929klzzwxh:22930klzzwxh:22931klzzwxh:22932klzzwxh:22933klzzwxh:22934klzzwxh:22935klzzwxh:22936klzzwxh:22937klzzwxh:22938 // such a notification.klzzwxh:23449klzzwxh:22939klzzwxh:22940klzzwxh:22941klzzwxh:22942klzzwxh:22943klzzwxh:22944klzzwxh:22945klzzwxh:22946klzzwxh:22947klzzwxh:22948klzzwxh:22949 resHolder = klzzwxh:22495enlisted;klzzwxh:23450klzzwxh:22950klzzwxh:22951klzzwxh:22952klzzwxh:22953klzzwxh:22954klzzwxh:22955klzzwxh:22956klzzwxh:22957klzzwxh:22958klzzwxh:22959klzzwxh:22960 while klzzwxh:22496 resHolder klzzwxh:22497= null klzzwxh:22498 klzzwxh:22499klzzwxh:23451klzzwxh:22961klzzwxh:22962klzzwxh:22963klzzwxh:22964klzzwxh:22965klzzwxh:22966klzzwxh:22967klzzwxh:22968klzzwxh:22969klzzwxh:22970klzzwxh:22971klzzwxh:22972klzzwxh:22973klzzwxh:22974klzzwxh:22975 try klzzwxh:22500klzzwxh:23452klzzwxh:22976klzzwxh:22977klzzwxh:22978klzzwxh:22979klzzwxh:22980klzzwxh:22981klzzwxh:22982klzzwxh:22983klzzwxh:22984klzzwxh:22985klzzwxh:22986klzzwxh:22987klzzwxh:22988klzzwxh:22989klzzwxh:22990klzzwxh:22991klzzwxh:22992klzzwxh:22993klzzwxh:22994 if klzzwxh:22501 klzzwxh:22502 resHolder.klzzwxh:22503shared klzzwxh:22504 klzzwxh:22505klzzwxh:23453klzzwxh:22995klzzwxh:22996klzzwxh:22997klzzwxh:22998klzzwxh:22999klzzwxh:23000klzzwxh:23001klzzwxh:23002klzzwxh:23003klzzwxh:23004klzzwxh:23005klzzwxh:23006klzzwxh:23007klzzwxh:23008klzzwxh:23009klzzwxh:23010klzzwxh:23011klzzwxh:23012klzzwxh:23013klzzwxh:23014klzzwxh:23015klzzwxh:23016klzzwxh:23017 resHolder.klzzwxh:22506xaResource.forgetklzzwxh:22507 resHolder.klzzwxh:22508xid klzzwxh:22509;klzzwxh:23454klzzwxh:23018klzzwxh:23019klzzwxh:23020klzzwxh:23021klzzwxh:23022klzzwxh:23023klzzwxh:23024klzzwxh:23025klzzwxh:23026klzzwxh:23027klzzwxh:23028klzzwxh:23029klzzwxh:23030klzzwxh:23031klzzwxh:23032klzzwxh:23033klzzwxh:23034klzzwxh:23035klzzwxh:23036 klzzwxh:22510klzzwxh:23455klzzwxh:23037klzzwxh:23038klzzwxh:23039klzzwxh:23040klzzwxh:23041klzzwxh:23042klzzwxh:23043klzzwxh:23044klzzwxh:23045klzzwxh:23046klzzwxh:23047klzzwxh:23048klzzwxh:23049klzzwxh:23050klzzwxh:23051 klzzwxh:22511 catch klzzwxh:22512 XAException except klzzwxh:22513 klzzwxh:22514klzzwxh:23456klzzwxh:23052klzzwxh:23053klzzwxh:23054klzzwxh:23055klzzwxh:23056klzzwxh:23057klzzwxh:23058klzzwxh:23059klzzwxh:23060klzzwxh:23061klzzwxh:23062klzzwxh:23063klzzwxh:23064klzzwxh:23065klzzwxh:23066klzzwxh:23067klzzwxh:23068klzzwxh:23069klzzwxh:23070 xaErrorklzzwxh:22515 resHolder, except klzzwxh:22516;klzzwxh:23457klzzwxh:23071klzzwxh:23072klzzwxh:23073klzzwxh:23074klzzwxh:23075klzzwxh:23076klzzwxh:23077klzzwxh:23078klzzwxh:23079klzzwxh:23080klzzwxh:23081klzzwxh:23082klzzwxh:23083klzzwxh:23084klzzwxh:23085 klzzwxh:22517 catch klzzwxh:22518 Exception except klzzwxh:22519 klzzwxh:22520klzzwxh:23458klzzwxh:23086klzzwxh:23087klzzwxh:23088klzzwxh:23089klzzwxh:23090klzzwxh:23091klzzwxh:23092klzzwxh:23093klzzwxh:23094klzzwxh:23095klzzwxh:23096klzzwxh:23097klzzwxh:23098klzzwxh:23099klzzwxh:23100klzzwxh:23101klzzwxh:23102klzzwxh:23103klzzwxh:23104 errorklzzwxh:22521 except klzzwxh:22522;klzzwxh:23459klzzwxh:23105klzzwxh:23106klzzwxh:23107klzzwxh:23108klzzwxh:23109klzzwxh:23110klzzwxh:23111klzzwxh:23112klzzwxh:23113klzzwxh:23114klzzwxh:23115klzzwxh:23116klzzwxh:23117klzzwxh:23118klzzwxh:23119 klzzwxh:22523klzzwxh:23460klzzwxh:23120klzzwxh:23121klzzwxh:23122klzzwxh:23123klzzwxh:23124klzzwxh:23125klzzwxh:23126klzzwxh:23127klzzwxh:23128klzzwxh:23129klzzwxh:23130klzzwxh:23131klzzwxh:23132klzzwxh:23133klzzwxh:23134 resHolder = resHolder.klzzwxh:22524nextHolder;klzzwxh:23461klzzwxh:23135klzzwxh:23136klzzwxh:23137klzzwxh:23138klzzwxh:23139klzzwxh:23140klzzwxh:23141klzzwxh:23142klzzwxh:23143klzzwxh:23144klzzwxh:23145 klzzwxh:22525klzzwxh:23462klzzwxh:23146klzzwxh:23147klzzwxh:23148klzzwxh:23149klzzwxh:23150klzzwxh:23151klzzwxh:23152 klzzwxh:23463klzzwxh:23153klzzwxh:23154klzzwxh:23155klzzwxh:23156klzzwxh:23157klzzwxh:23158klzzwxh:23159klzzwxh:23160klzzwxh:23161klzzwxh:23162klzzwxh:23163 // Tell all the resources to forget about theirklzzwxh:23464klzzwxh:23164klzzwxh:23165klzzwxh:23166klzzwxh:23167klzzwxh:23168klzzwxh:23169klzzwxh:23170klzzwxh:23171klzzwxh:23172klzzwxh:23173klzzwxh:23174 // transaction. Shared resources do not requireklzzwxh:23465klzzwxh:23175klzzwxh:23176klzzwxh:23177klzzwxh:23178klzzwxh:23179klzzwxh:23180klzzwxh:23181klzzwxh:23182klzzwxh:23183klzzwxh:23184klzzwxh:23185 // such a notification.klzzwxh:23466klzzwxh:23186klzzwxh:23187klzzwxh:23188klzzwxh:23189klzzwxh:23190klzzwxh:23191klzzwxh:23192klzzwxh:23193klzzwxh:23194klzzwxh:23195klzzwxh:23196 resHolder = klzzwxh:22526delisted;klzzwxh:23467klzzwxh:23197klzzwxh:23198klzzwxh:23199klzzwxh:23200klzzwxh:23201klzzwxh:23202klzzwxh:23203klzzwxh:23204klzzwxh:23205klzzwxh:23206klzzwxh:23207 while klzzwxh:22527 resHolder klzzwxh:22528= null klzzwxh:22529 klzzwxh:22530klzzwxh:23468klzzwxh:23208klzzwxh:23209klzzwxh:23210klzzwxh:23211klzzwxh:23212klzzwxh:23213klzzwxh:23214klzzwxh:23215klzzwxh:23216klzzwxh:23217klzzwxh:23218klzzwxh:23219klzzwxh:23220klzzwxh:23221klzzwxh:23222 try klzzwxh:22531klzzwxh:23469klzzwxh:23223klzzwxh:23224klzzwxh:23225klzzwxh:23226klzzwxh:23227klzzwxh:23228klzzwxh:23229klzzwxh:23230klzzwxh:23231klzzwxh:23232klzzwxh:23233klzzwxh:23234klzzwxh:23235klzzwxh:23236klzzwxh:23237klzzwxh:23238klzzwxh:23239klzzwxh:23240klzzwxh:23241 if klzzwxh:22532 klzzwxh:22533 resHolder.klzzwxh:22534shared klzzwxh:22535 klzzwxh:22536klzzwxh:23470klzzwxh:23242klzzwxh:23243klzzwxh:23244klzzwxh:23245klzzwxh:23246klzzwxh:23247klzzwxh:23248klzzwxh:23249klzzwxh:23250klzzwxh:23251klzzwxh:23252klzzwxh:23253klzzwxh:23254klzzwxh:23255klzzwxh:23256klzzwxh:23257klzzwxh:23258klzzwxh:23259klzzwxh:23260klzzwxh:23261klzzwxh:23262klzzwxh:23263klzzwxh:23264 resHolder.klzzwxh:22537xaResource.forgetklzzwxh:22538 resHolder.klzzwxh:22539xid klzzwxh:22540;klzzwxh:23471klzzwxh:23265klzzwxh:23266klzzwxh:23267klzzwxh:23268klzzwxh:23269klzzwxh:23270klzzwxh:23271klzzwxh:23272klzzwxh:23273klzzwxh:23274klzzwxh:23275klzzwxh:23276klzzwxh:23277klzzwxh:23278klzzwxh:23279klzzwxh:23280klzzwxh:23281klzzwxh:23282klzzwxh:23283 klzzwxh:22541klzzwxh:23472klzzwxh:23284klzzwxh:23285klzzwxh:23286klzzwxh:23287klzzwxh:23288klzzwxh:23289klzzwxh:23290klzzwxh:23291klzzwxh:23292klzzwxh:23293klzzwxh:23294klzzwxh:23295klzzwxh:23296klzzwxh:23297klzzwxh:23298 klzzwxh:22542 catch klzzwxh:22543 XAException except klzzwxh:22544 klzzwxh:22545klzzwxh:23473klzzwxh:23299klzzwxh:23300klzzwxh:23301klzzwxh:23302klzzwxh:23303klzzwxh:23304klzzwxh:23305klzzwxh:23306klzzwxh:23307klzzwxh:23308klzzwxh:23309klzzwxh:23310klzzwxh:23311klzzwxh:23312klzzwxh:23313klzzwxh:23314klzzwxh:23315klzzwxh:23316klzzwxh:23317 xaErrorklzzwxh:22546 resHolder, except klzzwxh:22547;klzzwxh:23474klzzwxh:23318klzzwxh:23319klzzwxh:23320klzzwxh:23321klzzwxh:23322klzzwxh:23323klzzwxh:23324klzzwxh:23325klzzwxh:23326klzzwxh:23327klzzwxh:23328klzzwxh:23329klzzwxh:23330klzzwxh:23331klzzwxh:23332 klzzwxh:22548 catch klzzwxh:22549 Exception except klzzwxh:22550 klzzwxh:22551klzzwxh:23475klzzwxh:23333klzzwxh:23334klzzwxh:23335klzzwxh:23336klzzwxh:23337klzzwxh:23338klzzwxh:23339klzzwxh:23340klzzwxh:23341klzzwxh:23342klzzwxh:23343klzzwxh:23344klzzwxh:23345klzzwxh:23346klzzwxh:23347klzzwxh:23348klzzwxh:23349klzzwxh:23350klzzwxh:23351 errorklzzwxh:22552 except klzzwxh:22553;klzzwxh:23476klzzwxh:23352klzzwxh:23353klzzwxh:23354klzzwxh:23355klzzwxh:23356klzzwxh:23357klzzwxh:23358klzzwxh:23359klzzwxh:23360klzzwxh:23361klzzwxh:23362klzzwxh:23363klzzwxh:23364klzzwxh:23365klzzwxh:23366 klzzwxh:22554klzzwxh:23477klzzwxh:23367klzzwxh:23368klzzwxh:23369klzzwxh:23370klzzwxh:23371klzzwxh:23372klzzwxh:23373klzzwxh:23374klzzwxh:23375klzzwxh:23376klzzwxh:23377klzzwxh:23378klzzwxh:23379klzzwxh:23380klzzwxh:23381 resHolder = resHolder.klzzwxh:22555nextHolder;klzzwxh:23478klzzwxh:23382klzzwxh:23383klzzwxh:23384klzzwxh:23385klzzwxh:23386klzzwxh:23387klzzwxh:23388klzzwxh:23389klzzwxh:23390klzzwxh:23391klzzwxh:23392 klzzwxh:22556

klzzwxh:23544klzzwxh:23545klzzwxh:23546klzzwxh:23547klzzwxh:23548klzzwxh:23549klzzwxh:23550klzzwxh:23551klzzwxh:23552klzzwxh:23553klzzwxh:23554 if klzzwxh:23479 klzzwxh:23480resources klzzwxh:23481= null klzzwxh:23482 klzzwxh:23483klzzwxh:24124klzzwxh:23555klzzwxh:23556klzzwxh:23557klzzwxh:23558klzzwxh:23559klzzwxh:23560klzzwxh:23561klzzwxh:23562klzzwxh:23563klzzwxh:23564klzzwxh:23565klzzwxh:23566klzzwxh:23567klzzwxh:23568klzzwxh:23569 // Tell all the OTS resources to forget about theirklzzwxh:24125klzzwxh:23570klzzwxh:23571klzzwxh:23572klzzwxh:23573klzzwxh:23574klzzwxh:23575klzzwxh:23576klzzwxh:23577klzzwxh:23578klzzwxh:23579klzzwxh:23580klzzwxh:23581klzzwxh:23582klzzwxh:23583klzzwxh:23584 // transaction.klzzwxh:24126klzzwxh:23585klzzwxh:23586klzzwxh:23587klzzwxh:23588klzzwxh:23589klzzwxh:23590klzzwxh:23591klzzwxh:23592klzzwxh:23593klzzwxh:23594klzzwxh:23595klzzwxh:23596klzzwxh:23597klzzwxh:23598klzzwxh:23599 for klzzwxh:23484 int i = klzzwxh:23485resources.length ; i-- klzzwxh:23600 0 ; klzzwxh:23486 klzzwxh:23487klzzwxh:24127klzzwxh:23601klzzwxh:23602klzzwxh:23603klzzwxh:23604klzzwxh:23605klzzwxh:23606klzzwxh:23607klzzwxh:23608klzzwxh:23609klzzwxh:23610klzzwxh:23611klzzwxh:23612klzzwxh:23613klzzwxh:23614klzzwxh:23615klzzwxh:23616klzzwxh:23617klzzwxh:23618klzzwxh:23619 resource = klzzwxh:23488resourcesklzzwxh:23489 i klzzwxh:23490;klzzwxh:24128klzzwxh:23620klzzwxh:23621klzzwxh:23622klzzwxh:23623klzzwxh:23624klzzwxh:23625klzzwxh:23626klzzwxh:23627klzzwxh:23628klzzwxh:23629klzzwxh:23630klzzwxh:23631klzzwxh:23632klzzwxh:23633klzzwxh:23634klzzwxh:23635klzzwxh:23636klzzwxh:23637klzzwxh:23638 if klzzwxh:23491 resource klzzwxh:23492= null klzzwxh:23493 klzzwxh:23494klzzwxh:24129klzzwxh:23639klzzwxh:23640klzzwxh:23641klzzwxh:23642klzzwxh:23643klzzwxh:23644klzzwxh:23645klzzwxh:23646klzzwxh:23647klzzwxh:23648klzzwxh:23649klzzwxh:23650klzzwxh:23651klzzwxh:23652klzzwxh:23653klzzwxh:23654klzzwxh:23655klzzwxh:23656klzzwxh:23657klzzwxh:23658klzzwxh:23659klzzwxh:23660klzzwxh:23661 try klzzwxh:23495klzzwxh:24130klzzwxh:23662klzzwxh:23663klzzwxh:23664klzzwxh:23665klzzwxh:23666klzzwxh:23667klzzwxh:23668klzzwxh:23669klzzwxh:23670klzzwxh:23671klzzwxh:23672klzzwxh:23673klzzwxh:23674klzzwxh:23675klzzwxh:23676klzzwxh:23677klzzwxh:23678klzzwxh:23679klzzwxh:23680klzzwxh:23681klzzwxh:23682klzzwxh:23683klzzwxh:23684klzzwxh:23685klzzwxh:23686klzzwxh:23687klzzwxh:23688 resource.forgetklzzwxh:23496klzzwxh:23497;klzzwxh:24131klzzwxh:23689klzzwxh:23690klzzwxh:23691klzzwxh:23692klzzwxh:23693klzzwxh:23694klzzwxh:23695klzzwxh:23696klzzwxh:23697klzzwxh:23698klzzwxh:23699klzzwxh:23700klzzwxh:23701klzzwxh:23702klzzwxh:23703klzzwxh:23704klzzwxh:23705klzzwxh:23706klzzwxh:23707klzzwxh:23708klzzwxh:23709klzzwxh:23710klzzwxh:23711 klzzwxh:23498 catch klzzwxh:23499 Exception except klzzwxh:23500 klzzwxh:23501klzzwxh:24132klzzwxh:23712klzzwxh:23713klzzwxh:23714klzzwxh:23715klzzwxh:23716klzzwxh:23717klzzwxh:23718klzzwxh:23719klzzwxh:23720klzzwxh:23721klzzwxh:23722klzzwxh:23723klzzwxh:23724klzzwxh:23725klzzwxh:23726klzzwxh:23727klzzwxh:23728klzzwxh:23729klzzwxh:23730klzzwxh:23731klzzwxh:23732klzzwxh:23733klzzwxh:23734klzzwxh:23735klzzwxh:23736klzzwxh:23737klzzwxh:23738 errorklzzwxh:23502 except klzzwxh:23503;klzzwxh:24133klzzwxh:23739klzzwxh:23740klzzwxh:23741klzzwxh:23742klzzwxh:23743klzzwxh:23744klzzwxh:23745klzzwxh:23746klzzwxh:23747klzzwxh:23748klzzwxh:23749klzzwxh:23750klzzwxh:23751klzzwxh:23752klzzwxh:23753klzzwxh:23754klzzwxh:23755klzzwxh:23756klzzwxh:23757klzzwxh:23758klzzwxh:23759klzzwxh:23760klzzwxh:23761 klzzwxh:23504klzzwxh:24134klzzwxh:23762klzzwxh:23763klzzwxh:23764klzzwxh:23765klzzwxh:23766klzzwxh:23767klzzwxh:23768klzzwxh:23769klzzwxh:23770klzzwxh:23771klzzwxh:23772klzzwxh:23773klzzwxh:23774klzzwxh:23775klzzwxh:23776klzzwxh:23777klzzwxh:23778klzzwxh:23779klzzwxh:23780klzzwxh:23781klzzwxh:23782klzzwxh:23783klzzwxh:23784 klzzwxh:23505resourcesklzzwxh:23506 i klzzwxh:23507 = null;klzzwxh:24135klzzwxh:23785klzzwxh:23786klzzwxh:23787klzzwxh:23788klzzwxh:23789klzzwxh:23790klzzwxh:23791klzzwxh:23792klzzwxh:23793klzzwxh:23794klzzwxh:23795klzzwxh:23796klzzwxh:23797klzzwxh:23798klzzwxh:23799klzzwxh:23800klzzwxh:23801klzzwxh:23802klzzwxh:23803 klzzwxh:23508klzzwxh:24136klzzwxh:23804klzzwxh:23805klzzwxh:23806klzzwxh:23807klzzwxh:23808klzzwxh:23809klzzwxh:23810klzzwxh:23811klzzwxh:23812klzzwxh:23813klzzwxh:23814klzzwxh:23815klzzwxh:23816klzzwxh:23817klzzwxh:23818 klzzwxh:23509klzzwxh:24137klzzwxh:23819klzzwxh:23820klzzwxh:23821klzzwxh:23822klzzwxh:23823klzzwxh:23824klzzwxh:23825klzzwxh:23826klzzwxh:23827klzzwxh:23828klzzwxh:23829 klzzwxh:23510klzzwxh:24138klzzwxh:23830klzzwxh:23831klzzwxh:23832klzzwxh:23833klzzwxh:23834klzzwxh:23835klzzwxh:23836 klzzwxh:23511klzzwxh:24139klzzwxh:23837klzzwxh:23838klzzwxh:23839klzzwxh:23840klzzwxh:23841klzzwxh:23842klzzwxh:23843 klzzwxh:24140klzzwxh:23844klzzwxh:23845klzzwxh:23846klzzwxh:23847klzzwxh:23848klzzwxh:23849klzzwxh:23850 // the resources are no longer associated with the transactionklzzwxh:24141klzzwxh:23851klzzwxh:23852klzzwxh:23853klzzwxh:23854klzzwxh:23855klzzwxh:23856klzzwxh:23857 klzzwxh:23512enlisted = null;klzzwxh:24142klzzwxh:23858klzzwxh:23859klzzwxh:23860klzzwxh:23861klzzwxh:23862klzzwxh:23863klzzwxh:23864 klzzwxh:23513resources = null;klzzwxh:24143klzzwxh:23865klzzwxh:23866klzzwxh:23867klzzwxh:23868klzzwxh:23869klzzwxh:23870klzzwxh:23871 klzzwxh:23514delisted = null;klzzwxh:24144klzzwxh:23872klzzwxh:23873klzzwxh:23874 klzzwxh:24145klzzwxh:23875klzzwxh:23876klzzwxh:23877klzzwxh:23878klzzwxh:23879klzzwxh:23880klzzwxh:23881 // Notify all the synchronization objects that theklzzwxh:24146klzzwxh:23882klzzwxh:23883klzzwxh:23884klzzwxh:23885klzzwxh:23886klzzwxh:23887klzzwxh:23888 // transaction has completed with a status.klzzwxh:24147klzzwxh:23889klzzwxh:23890klzzwxh:23891klzzwxh:23892klzzwxh:23893klzzwxh:23894klzzwxh:23895 if klzzwxh:23515 klzzwxh:23516syncs klzzwxh:23517= null klzzwxh:23518 klzzwxh:23519klzzwxh:24148klzzwxh:23896klzzwxh:23897klzzwxh:23898klzzwxh:23899klzzwxh:23900klzzwxh:23901klzzwxh:23902 klzzwxh:24149klzzwxh:23903klzzwxh:23904klzzwxh:23905klzzwxh:23906klzzwxh:23907klzzwxh:23908klzzwxh:23909klzzwxh:23910klzzwxh:23911klzzwxh:23912klzzwxh:23913 // If we are not running in the same thread asklzzwxh:24150klzzwxh:23914klzzwxh:23915klzzwxh:23916klzzwxh:23917klzzwxh:23918klzzwxh:23919klzzwxh:23920klzzwxh:23921klzzwxh:23922klzzwxh:23923klzzwxh:23924 // this transaction, need to make this transactionklzzwxh:24151klzzwxh:23925klzzwxh:23926klzzwxh:23927klzzwxh:23928klzzwxh:23929klzzwxh:23930klzzwxh:23931klzzwxh:23932klzzwxh:23933klzzwxh:23934klzzwxh:23935 // the current one before calling method.klzzwxh:24152klzzwxh:23936klzzwxh:23937klzzwxh:23938klzzwxh:23939klzzwxh:23940klzzwxh:23941klzzwxh:23942klzzwxh:23943klzzwxh:23944klzzwxh:23945klzzwxh:23946 suspended = makeCurrentTransactionIfNecessaryklzzwxh:23520klzzwxh:23521;klzzwxh:24153klzzwxh:23947klzzwxh:23948klzzwxh:23949klzzwxh:23950klzzwxh:23951klzzwxh:23952klzzwxh:23953klzzwxh:23954klzzwxh:23955klzzwxh:23956klzzwxh:23957 klzzwxh:24154klzzwxh:23958klzzwxh:23959klzzwxh:23960klzzwxh:23961klzzwxh:23962klzzwxh:23963klzzwxh:23964klzzwxh:23965klzzwxh:23966klzzwxh:23967klzzwxh:23968 for klzzwxh:23522 int i = 0 ; i klzzwxh:23969 klzzwxh:23523syncs.length ; ++i klzzwxh:23524 klzzwxh:23525klzzwxh:24155klzzwxh:23970klzzwxh:23971klzzwxh:23972klzzwxh:23973klzzwxh:23974klzzwxh:23975klzzwxh:23976klzzwxh:23977klzzwxh:23978klzzwxh:23979klzzwxh:23980klzzwxh:23981klzzwxh:23982klzzwxh:23983klzzwxh:23984 sync = klzzwxh:23526syncsklzzwxh:23527 i klzzwxh:23528;klzzwxh:24156klzzwxh:23985klzzwxh:23986klzzwxh:23987klzzwxh:23988klzzwxh:23989klzzwxh:23990klzzwxh:23991klzzwxh:23992klzzwxh:23993klzzwxh:23994klzzwxh:23995klzzwxh:23996klzzwxh:23997klzzwxh:23998klzzwxh:23999 if klzzwxh:23529 sync == null klzzwxh:23530klzzwxh:24157klzzwxh:24000klzzwxh:24001klzzwxh:24002klzzwxh:24003klzzwxh:24004klzzwxh:24005klzzwxh:24006klzzwxh:24007klzzwxh:24008klzzwxh:24009klzzwxh:24010klzzwxh:24011klzzwxh:24012klzzwxh:24013klzzwxh:24014klzzwxh:24015klzzwxh:24016klzzwxh:24017klzzwxh:24018 break;klzzwxh:24158klzzwxh:24019klzzwxh:24020klzzwxh:24021klzzwxh:24022klzzwxh:24023klzzwxh:24024klzzwxh:24025klzzwxh:24026klzzwxh:24027klzzwxh:24028klzzwxh:24029klzzwxh:24030klzzwxh:24031klzzwxh:24032klzzwxh:24033 try klzzwxh:23531klzzwxh:24159klzzwxh:24034klzzwxh:24035klzzwxh:24036klzzwxh:24037klzzwxh:24038klzzwxh:24039klzzwxh:24040klzzwxh:24041klzzwxh:24042klzzwxh:24043klzzwxh:24044klzzwxh:24045klzzwxh:24046klzzwxh:24047klzzwxh:24048klzzwxh:24049klzzwxh:24050klzzwxh:24051klzzwxh:24052 sync.afterCompletionklzzwxh:23532 klzzwxh:23533status klzzwxh:23534;klzzwxh:24160klzzwxh:24053klzzwxh:24054klzzwxh:24055klzzwxh:24056klzzwxh:24057klzzwxh:24058klzzwxh:24059klzzwxh:24060klzzwxh:24061klzzwxh:24062klzzwxh:24063klzzwxh:24064klzzwxh:24065klzzwxh:24066klzzwxh:24067 klzzwxh:23535 catch klzzwxh:23536 Exception except klzzwxh:23537 klzzwxh:23538klzzwxh:24161klzzwxh:24068klzzwxh:24069klzzwxh:24070klzzwxh:24071klzzwxh:24072klzzwxh:24073klzzwxh:24074klzzwxh:24075klzzwxh:24076klzzwxh:24077klzzwxh:24078klzzwxh:24079klzzwxh:24080klzzwxh:24081klzzwxh:24082klzzwxh:24083klzzwxh:24084klzzwxh:24085klzzwxh:24086 errorklzzwxh:23539 except klzzwxh:23540;klzzwxh:24162klzzwxh:24087klzzwxh:24088klzzwxh:24089klzzwxh:24090klzzwxh:24091klzzwxh:24092klzzwxh:24093klzzwxh:24094klzzwxh:24095klzzwxh:24096klzzwxh:24097klzzwxh:24098klzzwxh:24099klzzwxh:24100klzzwxh:24101 klzzwxh:23541klzzwxh:24163klzzwxh:24102klzzwxh:24103klzzwxh:24104klzzwxh:24105klzzwxh:24106klzzwxh:24107klzzwxh:24108klzzwxh:24109klzzwxh:24110klzzwxh:24111klzzwxh:24112 klzzwxh:23542klzzwxh:24164klzzwxh:24113klzzwxh:24114klzzwxh:24115klzzwxh:24116klzzwxh:24117klzzwxh:24118klzzwxh:24119klzzwxh:24120klzzwxh:24121klzzwxh:24122klzzwxh:24123 klzzwxh:23543syncs = null;

klzzwxh:24192klzzwxh:24193klzzwxh:24194klzzwxh:24195klzzwxh:24196klzzwxh:24197klzzwxh:24198klzzwxh:24199klzzwxh:24200klzzwxh:24201klzzwxh:24202 // Resume the previous transaction associated withklzzwxh:24347klzzwxh:24203klzzwxh:24204klzzwxh:24205klzzwxh:24206klzzwxh:24207klzzwxh:24208klzzwxh:24209klzzwxh:24210klzzwxh:24211klzzwxh:24212klzzwxh:24213 // the thread.klzzwxh:24348klzzwxh:24214klzzwxh:24215klzzwxh:24216klzzwxh:24217klzzwxh:24218klzzwxh:24219klzzwxh:24220klzzwxh:24221klzzwxh:24222klzzwxh:24223klzzwxh:24224 if klzzwxh:24165 suspended klzzwxh:24166= null klzzwxh:24167klzzwxh:24349klzzwxh:24225klzzwxh:24226klzzwxh:24227klzzwxh:24228klzzwxh:24229klzzwxh:24230klzzwxh:24231klzzwxh:24232klzzwxh:24233klzzwxh:24234klzzwxh:24235klzzwxh:24236klzzwxh:24237klzzwxh:24238klzzwxh:24239 resumeTransactionklzzwxh:24168 suspended klzzwxh:24169;klzzwxh:24350klzzwxh:24240klzzwxh:24241klzzwxh:24242klzzwxh:24243klzzwxh:24244klzzwxh:24245klzzwxh:24246 klzzwxh:24170klzzwxh:24351klzzwxh:24247klzzwxh:24248klzzwxh:24249klzzwxh:24250klzzwxh:24251klzzwxh:24252klzzwxh:24253 klzzwxh:24352klzzwxh:24254klzzwxh:24255klzzwxh:24256klzzwxh:24257klzzwxh:24258klzzwxh:24259klzzwxh:24260 // If two-phase commit, must record completion ofklzzwxh:24353klzzwxh:24261klzzwxh:24262klzzwxh:24263klzzwxh:24264klzzwxh:24265klzzwxh:24266klzzwxh:24267 // transaction in journal.klzzwxh:24354klzzwxh:24268klzzwxh:24269klzzwxh:24270klzzwxh:24271klzzwxh:24272klzzwxh:24273klzzwxh:24274 if klzzwxh:24171 klzzwxh:24172twoPhase klzzwxh:24275klzzwxh:24276 klzzwxh:24173txDomain.klzzwxh:24174journal klzzwxh:24175= null klzzwxh:24176 klzzwxh:24177klzzwxh:24355klzzwxh:24277klzzwxh:24278klzzwxh:24279klzzwxh:24280klzzwxh:24281klzzwxh:24282klzzwxh:24283klzzwxh:24284klzzwxh:24285klzzwxh:24286klzzwxh:24287 try klzzwxh:24178klzzwxh:24356klzzwxh:24288klzzwxh:24289klzzwxh:24290klzzwxh:24291klzzwxh:24292klzzwxh:24293klzzwxh:24294klzzwxh:24295klzzwxh:24296klzzwxh:24297klzzwxh:24298klzzwxh:24299klzzwxh:24300klzzwxh:24301klzzwxh:24302 klzzwxh:24179txDomain.klzzwxh:24180journal.forgetklzzwxh:24181 klzzwxh:24182xid klzzwxh:24183;klzzwxh:24357klzzwxh:24303klzzwxh:24304klzzwxh:24305klzzwxh:24306klzzwxh:24307klzzwxh:24308klzzwxh:24309klzzwxh:24310klzzwxh:24311klzzwxh:24312klzzwxh:24313 klzzwxh:24184 catch klzzwxh:24185 SystemException except klzzwxh:24186 klzzwxh:24187klzzwxh:24358klzzwxh:24314klzzwxh:24315klzzwxh:24316klzzwxh:24317klzzwxh:24318klzzwxh:24319klzzwxh:24320klzzwxh:24321klzzwxh:24322klzzwxh:24323klzzwxh:24324klzzwxh:24325klzzwxh:24326klzzwxh:24327klzzwxh:24328 errorklzzwxh:24188 except klzzwxh:24189;klzzwxh:24359klzzwxh:24329klzzwxh:24330klzzwxh:24331klzzwxh:24332klzzwxh:24333klzzwxh:24334klzzwxh:24335klzzwxh:24336klzzwxh:24337klzzwxh:24338klzzwxh:24339 klzzwxh:24190klzzwxh:24360klzzwxh:24340klzzwxh:24341klzzwxh:24342klzzwxh:24343klzzwxh:24344klzzwxh:24345klzzwxh:24346 klzzwxh:24191

klzzwxh:24368klzzwxh:24369klzzwxh:24370klzzwxh:24371klzzwxh:24372klzzwxh:24373klzzwxh:24374 // Only top level transaction is registered with theklzzwxh:24431klzzwxh:24375klzzwxh:24376klzzwxh:24377klzzwxh:24378klzzwxh:24379klzzwxh:24380klzzwxh:24381 // transaction server and should be unlisted.klzzwxh:24432klzzwxh:24382klzzwxh:24383klzzwxh:24384klzzwxh:24385klzzwxh:24386klzzwxh:24387klzzwxh:24388 // This call must occur after the transaction isklzzwxh:24433klzzwxh:24389klzzwxh:24390klzzwxh:24391klzzwxh:24392klzzwxh:24393klzzwxh:24394klzzwxh:24395 // recorded in the journal, since forgetTransactionklzzwxh:24434klzzwxh:24396klzzwxh:24397klzzwxh:24398klzzwxh:24399klzzwxh:24400klzzwxh:24401klzzwxh:24402 // will close the journal for the last transactionklzzwxh:24435klzzwxh:24403klzzwxh:24404klzzwxh:24405klzzwxh:24406klzzwxh:24407klzzwxh:24408klzzwxh:24409 // in a terminating domain.klzzwxh:24436klzzwxh:24410klzzwxh:24411klzzwxh:24412klzzwxh:24413klzzwxh:24414klzzwxh:24415klzzwxh:24416 if klzzwxh:24361 klzzwxh:24362parent == null klzzwxh:24363klzzwxh:24437klzzwxh:24417klzzwxh:24418klzzwxh:24419klzzwxh:24420klzzwxh:24421klzzwxh:24422klzzwxh:24423klzzwxh:24424klzzwxh:24425klzzwxh:24426klzzwxh:24427 klzzwxh:24364txDomain.forgetTransactionklzzwxh:24365 this klzzwxh:24366;klzzwxh:24438klzzwxh:24428klzzwxh:24429klzzwxh:24430 klzzwxh:24367

klzzwxh:24471klzzwxh:24472klzzwxh:24473 /klzzwxh:24439klzzwxh:24440klzzwxh:24604klzzwxh:24474klzzwxh:24475klzzwxh:24476klzzwxh:24477 klzzwxh:24441 Called during recovery to add a resource. This method is calledklzzwxh:24605klzzwxh:24478klzzwxh:24479klzzwxh:24480klzzwxh:24481 klzzwxh:24442 for every resource that reports a transaction branch duringklzzwxh:24606klzzwxh:24482klzzwxh:24483klzzwxh:24484klzzwxh:24485 klzzwxh:24443 recovery. The resource's Xid is preserved and the resource isklzzwxh:24607klzzwxh:24486klzzwxh:24487klzzwxh:24488klzzwxh:24489 klzzwxh:24444 not started in the transaction. If an error occurs, the transactionklzzwxh:24608klzzwxh:24490klzzwxh:24491klzzwxh:24492klzzwxh:24493 klzzwxh:24445 heuristic decision is changed to hazard klzzwxh:24446not knowing whether theklzzwxh:24609klzzwxh:24494klzzwxh:24495klzzwxh:24496klzzwxh:24497 klzzwxh:24447 resource commits or rollsbackklzzwxh:24448.klzzwxh:24610klzzwxh:24498klzzwxh:24499klzzwxh:24500klzzwxh:24501 klzzwxh:24449klzzwxh:24611klzzwxh:24502klzzwxh:24503klzzwxh:24504klzzwxh:24505 klzzwxh:24450 @param xaResource The XA resourceklzzwxh:24612klzzwxh:24506klzzwxh:24507klzzwxh:24508klzzwxh:24509 klzzwxh:24451 @param xid The Xid for the transaction branchklzzwxh:24613klzzwxh:24510klzzwxh:24511klzzwxh:24512klzzwxh:24513 klzzwxh:24452/klzzwxh:24614klzzwxh:24514klzzwxh:24515klzzwxh:24516 protected void addRecoveryklzzwxh:24453 XAResource xaResource, Xid xid klzzwxh:24454klzzwxh:24615klzzwxh:24517klzzwxh:24518klzzwxh:24519 klzzwxh:24455klzzwxh:24616klzzwxh:24520klzzwxh:24521klzzwxh:24522klzzwxh:24523klzzwxh:24524klzzwxh:24525klzzwxh:24526 InternalXAResourceHolder resHolder;klzzwxh:24617klzzwxh:24527klzzwxh:24528klzzwxh:24529 klzzwxh:24618klzzwxh:24530klzzwxh:24531klzzwxh:24532klzzwxh:24533klzzwxh:24534klzzwxh:24535klzzwxh:24536 if klzzwxh:24456 xaResource == null klzzwxh:24457klzzwxh:24619klzzwxh:24537klzzwxh:24538klzzwxh:24539klzzwxh:24540klzzwxh:24541klzzwxh:24542klzzwxh:24543klzzwxh:24544klzzwxh:24545klzzwxh:24546klzzwxh:24547 throw new IllegalArgumentExceptionklzzwxh:24458 klzzwxh:24548Argument xaResource is nullklzzwxh:24549 klzzwxh:24459;klzzwxh:24620klzzwxh:24550klzzwxh:24551klzzwxh:24552klzzwxh:24553klzzwxh:24554klzzwxh:24555klzzwxh:24556 if klzzwxh:24460 xid == null klzzwxh:24461klzzwxh:24621klzzwxh:24557klzzwxh:24558klzzwxh:24559klzzwxh:24560klzzwxh:24561klzzwxh:24562klzzwxh:24563klzzwxh:24564klzzwxh:24565klzzwxh:24566klzzwxh:24567 throw new IllegalArgumentExceptionklzzwxh:24462 klzzwxh:24568Argument xid is nullklzzwxh:24569 klzzwxh:24463;klzzwxh:24622klzzwxh:24570klzzwxh:24571klzzwxh:24572 klzzwxh:24623klzzwxh:24573klzzwxh:24574klzzwxh:24575klzzwxh:24576klzzwxh:24577klzzwxh:24578klzzwxh:24579 resHolder = new InternalXAResourceHolderklzzwxh:24464 xaResource, null, xid, false klzzwxh:24465;klzzwxh:24624klzzwxh:24580klzzwxh:24581klzzwxh:24582klzzwxh:24583klzzwxh:24584klzzwxh:24585klzzwxh:24586 resHolder.klzzwxh:24466nextHolder = klzzwxh:24467enlisted;klzzwxh:24625klzzwxh:24587klzzwxh:24588klzzwxh:24589klzzwxh:24590klzzwxh:24591klzzwxh:24592klzzwxh:24593 resHolder.klzzwxh:24468endFlag = XAResource.TMSUCCESS;klzzwxh:24626klzzwxh:24594klzzwxh:24595klzzwxh:24596klzzwxh:24597klzzwxh:24598klzzwxh:24599klzzwxh:24600 klzzwxh:24469enlisted = resHolder;klzzwxh:24627klzzwxh:24601klzzwxh:24602klzzwxh:24603 klzzwxh:24470

klzzwxh:24628klzzwxh:24629klzzwxh:24630 //-------------------------------------------------------------------------klzzwxh:24637klzzwxh:24631klzzwxh:24632klzzwxh:24633 // Implementation detailsklzzwxh:24638klzzwxh:24634klzzwxh:24635klzzwxh:24636 //-------------------------------------------------------------------------

klzzwxh:24676klzzwxh:24677klzzwxh:24678 /klzzwxh:24639klzzwxh:24640klzzwxh:24800klzzwxh:24679klzzwxh:24680klzzwxh:24681klzzwxh:24682 klzzwxh:24641 Suspend the current transaction. This method is used when performingklzzwxh:24801klzzwxh:24683klzzwxh:24684klzzwxh:24685klzzwxh:24686 klzzwxh:24642 asynchronous commit or roll back. It dissocaites the transaction fromklzzwxh:24802klzzwxh:24687klzzwxh:24688klzzwxh:24689klzzwxh:24690 klzzwxh:24643 the current thread allowing the thread to proceed while the transactionklzzwxh:24803klzzwxh:24691klzzwxh:24692klzzwxh:24693klzzwxh:24694 klzzwxh:24644 is being committed/rolledback.klzzwxh:24804klzzwxh:24695klzzwxh:24696klzzwxh:24697klzzwxh:24698 klzzwxh:24645klzzwxh:24805klzzwxh:24699klzzwxh:24700klzzwxh:24701klzzwxh:24702 klzzwxh:24646 @see klzzwxh:24647asyncCommit asyncCommitklzzwxh:24806klzzwxh:24703klzzwxh:24704klzzwxh:24705klzzwxh:24706 klzzwxh:24648 @see klzzwxh:24649asyncRollback asyncRollbackklzzwxh:24807klzzwxh:24707klzzwxh:24708klzzwxh:24709klzzwxh:24710 klzzwxh:24650/klzzwxh:24808klzzwxh:24711klzzwxh:24712klzzwxh:24713 private void suspendTransactionklzzwxh:24651klzzwxh:24652klzzwxh:24809klzzwxh:24714klzzwxh:24715klzzwxh:24716 klzzwxh:24653klzzwxh:24810klzzwxh:24717klzzwxh:24718klzzwxh:24719klzzwxh:24720klzzwxh:24721klzzwxh:24722klzzwxh:24723 try klzzwxh:24654klzzwxh:24811klzzwxh:24724klzzwxh:24725klzzwxh:24726klzzwxh:24727klzzwxh:24728klzzwxh:24729klzzwxh:24730klzzwxh:24731klzzwxh:24732klzzwxh:24733klzzwxh:24734 // Suspend if this transaction associated with the current thread.klzzwxh:24812klzzwxh:24735klzzwxh:24736klzzwxh:24737klzzwxh:24738klzzwxh:24739klzzwxh:24740klzzwxh:24741klzzwxh:24742klzzwxh:24743klzzwxh:24744klzzwxh:24745 if klzzwxh:24655 klzzwxh:24656txDomain.klzzwxh:24657txManager.getTransactionklzzwxh:24658klzzwxh:24659 == this klzzwxh:24660klzzwxh:24813klzzwxh:24746klzzwxh:24747klzzwxh:24748klzzwxh:24749klzzwxh:24750klzzwxh:24751klzzwxh:24752klzzwxh:24753klzzwxh:24754klzzwxh:24755klzzwxh:24756klzzwxh:24757klzzwxh:24758klzzwxh:24759klzzwxh:24760 klzzwxh:24661txDomain.klzzwxh:24662txManager.suspendklzzwxh:24663klzzwxh:24664;klzzwxh:24814klzzwxh:24761klzzwxh:24762klzzwxh:24763klzzwxh:24764klzzwxh:24765klzzwxh:24766klzzwxh:24767 klzzwxh:24665 catch klzzwxh:24666 Exception except klzzwxh:24667 klzzwxh:24668klzzwxh:24815klzzwxh:24768klzzwxh:24769klzzwxh:24770klzzwxh:24771klzzwxh:24772klzzwxh:24773klzzwxh:24774klzzwxh:24775klzzwxh:24776klzzwxh:24777klzzwxh:24778 klzzwxh:24669status = STATUSklzzwxh:24670MARKEDklzzwxh:24671ROLLBACK;klzzwxh:24816klzzwxh:24779klzzwxh:24780klzzwxh:24781klzzwxh:24782klzzwxh:24783klzzwxh:24784klzzwxh:24785klzzwxh:24786klzzwxh:24787klzzwxh:24788klzzwxh:24789 errorklzzwxh:24672 except klzzwxh:24673;klzzwxh:24817klzzwxh:24790klzzwxh:24791klzzwxh:24792klzzwxh:24793klzzwxh:24794klzzwxh:24795klzzwxh:24796 klzzwxh:24674klzzwxh:24818klzzwxh:24797klzzwxh:24798klzzwxh:24799 klzzwxh:24675

klzzwxh:24832klzzwxh:24833klzzwxh:24834 /klzzwxh:24819klzzwxh:24820klzzwxh:24956klzzwxh:24835klzzwxh:24836klzzwxh:24837klzzwxh:24838 klzzwxh:24821 Return true if all the resources in the specified XA resourceklzzwxh:24957klzzwxh:24839klzzwxh:24840klzzwxh:24841klzzwxh:24842 klzzwxh:24822 holder list are shared.klzzwxh:24958klzzwxh:24843klzzwxh:24844klzzwxh:24845klzzwxh:24846 klzzwxh:24823klzzwxh:24959klzzwxh:24847klzzwxh:24848klzzwxh:24849klzzwxh:24850 klzzwxh:24824 @param resHolder The XA resource holder list.klzzwxh:24960klzzwxh:24851klzzwxh:24852klzzwxh:24853klzzwxh:24854 klzzwxh:24825 @param isPreviouslyShared True if other XA resources are shared.klzzwxh:24961klzzwxh:24855klzzwxh:24856klzzwxh:24857klzzwxh:24858 klzzwxh:24826 @return True if all the resources in the specifiedklzzwxh:24962klzzwxh:24859klzzwxh:24860klzzwxh:24861klzzwxh:24862 klzzwxh:24827 XA resource holder list are sharedklzzwxh:24963klzzwxh:24863klzzwxh:24864klzzwxh:24865klzzwxh:24866 klzzwxh:24828/klzzwxh:24964klzzwxh:24867klzzwxh:24868klzzwxh:24869 private boolean areXaResourcesSharedklzzwxh:24829 InternalXAResourceHolder resHolder, klzzwxh:24965klzzwxh:24870klzzwxh:24871klzzwxh:24872klzzwxh:24873klzzwxh:24874klzzwxh:24875klzzwxh:24876klzzwxh:24877klzzwxh:24878klzzwxh:24879klzzwxh:24880klzzwxh:24881klzzwxh:24882klzzwxh:24883klzzwxh:24884klzzwxh:24885klzzwxh:24886klzzwxh:24887klzzwxh:24888klzzwxh:24889klzzwxh:24890klzzwxh:24891klzzwxh:24892klzzwxh:24893klzzwxh:24894klzzwxh:24895klzzwxh:24896klzzwxh:24897klzzwxh:24898klzzwxh:24899klzzwxh:24900klzzwxh:24901klzzwxh:24902klzzwxh:24903klzzwxh:24904klzzwxh:24905klzzwxh:24906klzzwxh:24907klzzwxh:24908klzzwxh:24909klzzwxh:24910 boolean isPreviouslyShared klzzwxh:24830klzzwxh:24966klzzwxh:24911klzzwxh:24912klzzwxh:24913 klzzwxh:24831klzzwxh:24967klzzwxh:24914klzzwxh:24915klzzwxh:24916klzzwxh:24917klzzwxh:24918klzzwxh:24919klzzwxh:24920 // true if an XA resource in the specified XA resourceklzzwxh:24968klzzwxh:24921klzzwxh:24922klzzwxh:24923klzzwxh:24924klzzwxh:24925klzzwxh:24926klzzwxh:24927 // list is not sharedklzzwxh:24969klzzwxh:24928klzzwxh:24929klzzwxh:24930klzzwxh:24931klzzwxh:24932klzzwxh:24933klzzwxh:24934 // we can initialize the value of the variable to klzzwxh:24970klzzwxh:24935klzzwxh:24936klzzwxh:24937klzzwxh:24938klzzwxh:24939klzzwxh:24940klzzwxh:24941 // value of isPreviouslyShared but that dirties klzzwxh:24971klzzwxh:24942klzzwxh:24943klzzwxh:24944klzzwxh:24945klzzwxh:24946klzzwxh:24947klzzwxh:24948 // the logic a bitklzzwxh:24972klzzwxh:24949klzzwxh:24950klzzwxh:24951klzzwxh:24952klzzwxh:24953klzzwxh:24954klzzwxh:24955 boolean isUnshared = false;

klzzwxh:24988klzzwxh:24989klzzwxh:24990klzzwxh:24991klzzwxh:24992klzzwxh:24993klzzwxh:24994 while klzzwxh:24973 resHolder klzzwxh:24974= null klzzwxh:24975 klzzwxh:24976klzzwxh:25127klzzwxh:24995klzzwxh:24996klzzwxh:24997klzzwxh:24998klzzwxh:24999klzzwxh:25000klzzwxh:25001klzzwxh:25002klzzwxh:25003klzzwxh:25004klzzwxh:25005 if klzzwxh:24977 klzzwxh:24978 resHolder.klzzwxh:24979shared klzzwxh:24980 klzzwxh:24981klzzwxh:25128klzzwxh:25006klzzwxh:25007klzzwxh:25008klzzwxh:25009klzzwxh:25010klzzwxh:25011klzzwxh:25012klzzwxh:25013klzzwxh:25014klzzwxh:25015klzzwxh:25016klzzwxh:25017klzzwxh:25018klzzwxh:25019klzzwxh:25020 // we found another xa res that is not sharedklzzwxh:25129klzzwxh:25021klzzwxh:25022klzzwxh:25023klzzwxh:25024klzzwxh:25025klzzwxh:25026klzzwxh:25027klzzwxh:25028klzzwxh:25029klzzwxh:25030klzzwxh:25031klzzwxh:25032klzzwxh:25033klzzwxh:25034klzzwxh:25035 // with othersklzzwxh:25130klzzwxh:25036klzzwxh:25037klzzwxh:25038klzzwxh:25039klzzwxh:25040klzzwxh:25041klzzwxh:25042klzzwxh:25043klzzwxh:25044klzzwxh:25045klzzwxh:25046klzzwxh:25047klzzwxh:25048klzzwxh:25049klzzwxh:25050 if klzzwxh:24982 isUnshared || isPreviouslySharedklzzwxh:24983klzzwxh:25131klzzwxh:25051klzzwxh:25052klzzwxh:25053klzzwxh:25054klzzwxh:25055klzzwxh:25056klzzwxh:25057klzzwxh:25058klzzwxh:25059klzzwxh:25060klzzwxh:25061klzzwxh:25062klzzwxh:25063klzzwxh:25064klzzwxh:25065klzzwxh:25066klzzwxh:25067klzzwxh:25068klzzwxh:25069 return false;klzzwxh:25070klzzwxh:25071klzzwxh:25072 klzzwxh:25132klzzwxh:25073klzzwxh:25074klzzwxh:25075klzzwxh:25076klzzwxh:25077klzzwxh:25078klzzwxh:25079klzzwxh:25080klzzwxh:25081klzzwxh:25082klzzwxh:25083klzzwxh:25084klzzwxh:25085klzzwxh:25086klzzwxh:25087 isUnshared = true;klzzwxh:25133klzzwxh:25088klzzwxh:25089klzzwxh:25090klzzwxh:25091klzzwxh:25092klzzwxh:25093klzzwxh:25094klzzwxh:25095klzzwxh:25096klzzwxh:25097klzzwxh:25098 klzzwxh:24984klzzwxh:25134klzzwxh:25099klzzwxh:25100klzzwxh:25101klzzwxh:25102klzzwxh:25103klzzwxh:25104klzzwxh:25105klzzwxh:25106klzzwxh:25107klzzwxh:25108klzzwxh:25109 resHolder = resHolder.klzzwxh:24985nextHolder;klzzwxh:25135klzzwxh:25110klzzwxh:25111klzzwxh:25112klzzwxh:25113klzzwxh:25114klzzwxh:25115klzzwxh:25116 klzzwxh:24986klzzwxh:25136klzzwxh:25117klzzwxh:25118klzzwxh:25119klzzwxh:25120klzzwxh:25121klzzwxh:25122klzzwxh:25123 return true;klzzwxh:25137klzzwxh:25124klzzwxh:25125klzzwxh:25126 klzzwxh:24987

klzzwxh:25265klzzwxh:25266klzzwxh:25267 /klzzwxh:25138klzzwxh:25139klzzwxh:26536klzzwxh:25268klzzwxh:25269klzzwxh:25270klzzwxh:25271 klzzwxh:25140 Commit transactionklzzwxh:26537klzzwxh:25272klzzwxh:25273klzzwxh:25274klzzwxh:25275 klzzwxh:25141klzzwxh:26538klzzwxh:25276klzzwxh:25277klzzwxh:25278klzzwxh:25279 klzzwxh:25142 @param canUseOnePhaseCommit True if one-phase commit is used.klzzwxh:26539klzzwxh:25280klzzwxh:25281klzzwxh:25282klzzwxh:25283 klzzwxh:25143 @throws RollbackException Thrown to indicate that the transactionklzzwxh:26540klzzwxh:25284klzzwxh:25285klzzwxh:25286klzzwxh:25287 klzzwxh:25144 has been rolled back rather than committed.klzzwxh:26541klzzwxh:25288klzzwxh:25289klzzwxh:25290klzzwxh:25291 klzzwxh:25145 @throws HeuristicMixedException Thrown to indicate that a heuristicklzzwxh:26542klzzwxh:25292klzzwxh:25293klzzwxh:25294klzzwxh:25295 klzzwxh:25146 decision was made and that some relevant updates have been committedklzzwxh:26543klzzwxh:25296klzzwxh:25297klzzwxh:25298klzzwxh:25299 klzzwxh:25147 while others have been rolled back.klzzwxh:26544klzzwxh:25300klzzwxh:25301klzzwxh:25302klzzwxh:25303 klzzwxh:25148 @throws HeuristicRollbackException Thrown to indicate that a heuristicklzzwxh:26545klzzwxh:25304klzzwxh:25305klzzwxh:25306klzzwxh:25307 klzzwxh:25149 decision was made and that some relevant updates have been rolled back.klzzwxh:26546klzzwxh:25308klzzwxh:25309klzzwxh:25310klzzwxh:25311 klzzwxh:25150 @throws SecurityException Thrown to indicate that the thread is notklzzwxh:26547klzzwxh:25312klzzwxh:25313klzzwxh:25314klzzwxh:25315 klzzwxh:25151 allowed to commit the transaction.klzzwxh:26548klzzwxh:25316klzzwxh:25317klzzwxh:25318klzzwxh:25319 klzzwxh:25152 @throws IllegalStateException Thrown if the current thread is notklzzwxh:26549klzzwxh:25320klzzwxh:25321klzzwxh:25322klzzwxh:25323 klzzwxh:25153 associated with a transaction.klzzwxh:26550klzzwxh:25324klzzwxh:25325klzzwxh:25326klzzwxh:25327 klzzwxh:25154 @throws SystemException Thrown if the transaction manager encountersklzzwxh:26551klzzwxh:25328klzzwxh:25329klzzwxh:25330klzzwxh:25331 klzzwxh:25155 an unexpected error conditionklzzwxh:26552klzzwxh:25332klzzwxh:25333klzzwxh:25334klzzwxh:25335 klzzwxh:25156/klzzwxh:26553klzzwxh:25336klzzwxh:25337klzzwxh:25338 private void commitklzzwxh:25157 boolean canUseOnePhaseCommit klzzwxh:25158klzzwxh:26554klzzwxh:25339klzzwxh:25340klzzwxh:25341klzzwxh:25342klzzwxh:25343klzzwxh:25344klzzwxh:25345 throws RollbackException, HeuristicMixedException, HeuristicRollbackException,klzzwxh:26555klzzwxh:25346klzzwxh:25347klzzwxh:25348klzzwxh:25349klzzwxh:25350klzzwxh:25351klzzwxh:25352klzzwxh:25353klzzwxh:25354klzzwxh:25355klzzwxh:25356klzzwxh:25357klzzwxh:25358klzzwxh:25359 SecurityException, SystemExceptionklzzwxh:26556klzzwxh:25360klzzwxh:25361klzzwxh:25362 klzzwxh:25159klzzwxh:26557klzzwxh:25363klzzwxh:25364klzzwxh:25365klzzwxh:25366klzzwxh:25367klzzwxh:25368klzzwxh:25369 try klzzwxh:25160klzzwxh:26558klzzwxh:25370klzzwxh:25371klzzwxh:25372klzzwxh:25373klzzwxh:25374klzzwxh:25375klzzwxh:25376klzzwxh:25377klzzwxh:25378klzzwxh:25379klzzwxh:25380 klzzwxh:25161txDomain.notifyCommitklzzwxh:25162 this klzzwxh:25163;klzzwxh:26559klzzwxh:25381klzzwxh:25382klzzwxh:25383klzzwxh:25384klzzwxh:25385klzzwxh:25386klzzwxh:25387klzzwxh:25388klzzwxh:25389klzzwxh:25390klzzwxh:25391 klzzwxh:26560klzzwxh:25392klzzwxh:25393klzzwxh:25394klzzwxh:25395klzzwxh:25396klzzwxh:25397klzzwxh:25398klzzwxh:25399klzzwxh:25400klzzwxh:25401klzzwxh:25402 if klzzwxh:25164 klzzwxh:25165canUseOnePhaseCommit klzzwxh:25166klzzwxh:26561klzzwxh:25403klzzwxh:25404klzzwxh:25405klzzwxh:25406klzzwxh:25407klzzwxh:25408klzzwxh:25409klzzwxh:25410klzzwxh:25411klzzwxh:25412klzzwxh:25413klzzwxh:25414klzzwxh:25415klzzwxh:25416klzzwxh:25417 // This is two phase commit. Notify the domain about requestklzzwxh:26562klzzwxh:25418klzzwxh:25419klzzwxh:25420klzzwxh:25421klzzwxh:25422klzzwxh:25423klzzwxh:25424klzzwxh:25425klzzwxh:25426klzzwxh:25427klzzwxh:25428klzzwxh:25429klzzwxh:25430klzzwxh:25431klzzwxh:25432 // to commit transaction which might result in RollbackException.klzzwxh:26563klzzwxh:25433klzzwxh:25434klzzwxh:25435klzzwxh:25436klzzwxh:25437klzzwxh:25438klzzwxh:25439klzzwxh:25440klzzwxh:25441klzzwxh:25442klzzwxh:25443klzzwxh:25444klzzwxh:25445klzzwxh:25446klzzwxh:25447 // If succeeded, attempt to prepare transaction and act basedklzzwxh:26564klzzwxh:25448klzzwxh:25449klzzwxh:25450klzzwxh:25451klzzwxh:25452klzzwxh:25453klzzwxh:25454klzzwxh:25455klzzwxh:25456klzzwxh:25457klzzwxh:25458klzzwxh:25459klzzwxh:25460klzzwxh:25461klzzwxh:25462 // no the return heuristic.klzzwxh:26565klzzwxh:25463klzzwxh:25464klzzwxh:25465klzzwxh:25466klzzwxh:25467klzzwxh:25468klzzwxh:25469klzzwxh:25470klzzwxh:25471klzzwxh:25472klzzwxh:25473klzzwxh:25474klzzwxh:25475klzzwxh:25476klzzwxh:25477 prepareklzzwxh:25167klzzwxh:25168;klzzwxh:26566klzzwxh:25478klzzwxh:25479klzzwxh:25480klzzwxh:25481klzzwxh:25482klzzwxh:25483klzzwxh:25484klzzwxh:25485klzzwxh:25486klzzwxh:25487klzzwxh:25488 elseklzzwxh:26567klzzwxh:25489klzzwxh:25490klzzwxh:25491klzzwxh:25492klzzwxh:25493klzzwxh:25494klzzwxh:25495klzzwxh:25496klzzwxh:25497klzzwxh:25498klzzwxh:25499klzzwxh:25500klzzwxh:25501klzzwxh:25502klzzwxh:25503 endResourcesklzzwxh:25169klzzwxh:25170;klzzwxh:26568klzzwxh:25504klzzwxh:25505klzzwxh:25506klzzwxh:25507klzzwxh:25508klzzwxh:25509klzzwxh:25510 klzzwxh:25171 catch klzzwxh:25172 RollbackException except klzzwxh:25173 klzzwxh:25174klzzwxh:26569klzzwxh:25511klzzwxh:25512klzzwxh:25513klzzwxh:25514klzzwxh:25515klzzwxh:25516klzzwxh:25517klzzwxh:25518klzzwxh:25519klzzwxh:25520klzzwxh:25521 klzzwxh:25175heuristic = Heuristic.ROLLBACK;klzzwxh:26570klzzwxh:25522klzzwxh:25523klzzwxh:25524klzzwxh:25525klzzwxh:25526klzzwxh:25527klzzwxh:25528 klzzwxh:25176klzzwxh:26571klzzwxh:25529klzzwxh:25530klzzwxh:25531klzzwxh:25532klzzwxh:25533klzzwxh:25534klzzwxh:25535 klzzwxh:26572klzzwxh:25536klzzwxh:25537klzzwxh:25538klzzwxh:25539klzzwxh:25540klzzwxh:25541klzzwxh:25542 // flag to tell forget what heuristic exceptions to look forklzzwxh:26573klzzwxh:25543klzzwxh:25544klzzwxh:25545klzzwxh:25546klzzwxh:25547klzzwxh:25548klzzwxh:25549 switch klzzwxh:25177 klzzwxh:25178heuristic klzzwxh:25179 klzzwxh:25180klzzwxh:26574klzzwxh:25550klzzwxh:25551klzzwxh:25552klzzwxh:25553klzzwxh:25554klzzwxh:25555klzzwxh:25556 case Heuristic.READONLY:klzzwxh:26575klzzwxh:25557klzzwxh:25558klzzwxh:25559klzzwxh:25560klzzwxh:25561klzzwxh:25562klzzwxh:25563klzzwxh:25564klzzwxh:25565klzzwxh:25566klzzwxh:25567 try klzzwxh:25181klzzwxh:26576klzzwxh:25568klzzwxh:25569klzzwxh:25570klzzwxh:25571klzzwxh:25572klzzwxh:25573klzzwxh:25574klzzwxh:25575klzzwxh:25576klzzwxh:25577klzzwxh:25578klzzwxh:25579klzzwxh:25580klzzwxh:25581klzzwxh:25582 // Read only resource does not need either commit, nor rollbackklzzwxh:26577klzzwxh:25583klzzwxh:25584klzzwxh:25585klzzwxh:25586klzzwxh:25587klzzwxh:25588klzzwxh:25589klzzwxh:25590klzzwxh:25591klzzwxh:25592klzzwxh:25593klzzwxh:25594klzzwxh:25595klzzwxh:25596klzzwxh:25597 klzzwxh:25182txDomain.notifyCompletionklzzwxh:25183 this, klzzwxh:25184heuristic klzzwxh:25185;klzzwxh:26578klzzwxh:25598klzzwxh:25599klzzwxh:25600klzzwxh:25601klzzwxh:25602klzzwxh:25603klzzwxh:25604klzzwxh:25605klzzwxh:25606klzzwxh:25607klzzwxh:25608klzzwxh:25609klzzwxh:25610klzzwxh:25611klzzwxh:25612 klzzwxh:25186status = STATUSklzzwxh:25187COMMITTED;klzzwxh:26579klzzwxh:25613klzzwxh:25614klzzwxh:25615klzzwxh:25616klzzwxh:25617klzzwxh:25618klzzwxh:25619klzzwxh:25620klzzwxh:25621klzzwxh:25622klzzwxh:25623klzzwxh:25624klzzwxh:25625klzzwxh:25626klzzwxh:25627 break;klzzwxh:26580klzzwxh:25628klzzwxh:25629klzzwxh:25630klzzwxh:25631klzzwxh:25632klzzwxh:25633klzzwxh:25634klzzwxh:25635klzzwxh:25636klzzwxh:25637klzzwxh:25638 klzzwxh:25188 finally klzzwxh:25189 klzzwxh:26581klzzwxh:25639klzzwxh:25640klzzwxh:25641klzzwxh:25642klzzwxh:25643klzzwxh:25644klzzwxh:25645klzzwxh:25646klzzwxh:25647klzzwxh:25648klzzwxh:25649klzzwxh:25650klzzwxh:25651klzzwxh:25652klzzwxh:25653 // The transaction will now tell all it's resources toklzzwxh:26582klzzwxh:25654klzzwxh:25655klzzwxh:25656klzzwxh:25657klzzwxh:25658klzzwxh:25659klzzwxh:25660klzzwxh:25661klzzwxh:25662klzzwxh:25663klzzwxh:25664klzzwxh:25665klzzwxh:25666klzzwxh:25667klzzwxh:25668 // forget about the transaction and will release allklzzwxh:26583klzzwxh:25669klzzwxh:25670klzzwxh:25671klzzwxh:25672klzzwxh:25673klzzwxh:25674klzzwxh:25675klzzwxh:25676klzzwxh:25677klzzwxh:25678klzzwxh:25679klzzwxh:25680klzzwxh:25681klzzwxh:25682klzzwxh:25683 // held resources. Also notifies all the synchronizationklzzwxh:26584klzzwxh:25684klzzwxh:25685klzzwxh:25686klzzwxh:25687klzzwxh:25688klzzwxh:25689klzzwxh:25690klzzwxh:25691klzzwxh:25692klzzwxh:25693klzzwxh:25694klzzwxh:25695klzzwxh:25696klzzwxh:25697klzzwxh:25698 // objects that the transaction has completed with a status.klzzwxh:26585klzzwxh:25699klzzwxh:25700klzzwxh:25701klzzwxh:25702klzzwxh:25703klzzwxh:25704klzzwxh:25705klzzwxh:25706klzzwxh:25707klzzwxh:25708klzzwxh:25709klzzwxh:25710klzzwxh:25711klzzwxh:25712klzzwxh:25713 try klzzwxh:25190klzzwxh:26586klzzwxh:25714klzzwxh:25715klzzwxh:25716klzzwxh:25717klzzwxh:25718klzzwxh:25719klzzwxh:25720klzzwxh:25721klzzwxh:25722klzzwxh:25723klzzwxh:25724klzzwxh:25725klzzwxh:25726klzzwxh:25727klzzwxh:25728klzzwxh:25729klzzwxh:25730klzzwxh:25731klzzwxh:25732 forgetklzzwxh:25191 Heuristic.READONLY klzzwxh:25192;klzzwxh:26587klzzwxh:25733klzzwxh:25734klzzwxh:25735klzzwxh:25736klzzwxh:25737klzzwxh:25738klzzwxh:25739klzzwxh:25740klzzwxh:25741klzzwxh:25742klzzwxh:25743klzzwxh:25744klzzwxh:25745klzzwxh:25746klzzwxh:25747 klzzwxh:25193 catch klzzwxh:25194 IllegalStateException except klzzwxh:25195 klzzwxh:25196 klzzwxh:25197klzzwxh:26588klzzwxh:25748klzzwxh:25749klzzwxh:25750klzzwxh:25751klzzwxh:25752klzzwxh:25753klzzwxh:25754klzzwxh:25755klzzwxh:25756klzzwxh:25757klzzwxh:25758 klzzwxh:25198klzzwxh:26589klzzwxh:25759klzzwxh:25760klzzwxh:25761klzzwxh:25762klzzwxh:25763klzzwxh:25764klzzwxh:25765klzzwxh:25766klzzwxh:25767klzzwxh:25768klzzwxh:25769 klzzwxh:26590klzzwxh:25770klzzwxh:25771klzzwxh:25772klzzwxh:25773klzzwxh:25774klzzwxh:25775klzzwxh:25776 case Heuristic.ROLLBACK:klzzwxh:26591klzzwxh:25777klzzwxh:25778klzzwxh:25779klzzwxh:25780klzzwxh:25781klzzwxh:25782klzzwxh:25783 case Heuristic.MIXED:klzzwxh:26592klzzwxh:25784klzzwxh:25785klzzwxh:25786klzzwxh:25787klzzwxh:25788klzzwxh:25789klzzwxh:25790 case Heuristic.HAZARD:klzzwxh:26593klzzwxh:25791klzzwxh:25792klzzwxh:25793klzzwxh:25794klzzwxh:25795klzzwxh:25796klzzwxh:25797 case Heuristic.OTHER:klzzwxh:26594klzzwxh:25798klzzwxh:25799klzzwxh:25800klzzwxh:25801klzzwxh:25802klzzwxh:25803klzzwxh:25804klzzwxh:25805klzzwxh:25806klzzwxh:25807klzzwxh:25808 try klzzwxh:25199klzzwxh:26595klzzwxh:25809klzzwxh:25810klzzwxh:25811klzzwxh:25812klzzwxh:25813klzzwxh:25814klzzwxh:25815klzzwxh:25816klzzwxh:25817klzzwxh:25818klzzwxh:25819klzzwxh:25820klzzwxh:25821klzzwxh:25822klzzwxh:25823 // Transaction must be rolled back and an exception thrown toklzzwxh:26596klzzwxh:25824klzzwxh:25825klzzwxh:25826klzzwxh:25827klzzwxh:25828klzzwxh:25829klzzwxh:25830klzzwxh:25831klzzwxh:25832klzzwxh:25833klzzwxh:25834klzzwxh:25835klzzwxh:25836klzzwxh:25837klzzwxh:25838 // that effect.klzzwxh:26597klzzwxh:25839klzzwxh:25840klzzwxh:25841klzzwxh:25842klzzwxh:25843klzzwxh:25844klzzwxh:25845klzzwxh:25846klzzwxh:25847klzzwxh:25848klzzwxh:25849klzzwxh:25850klzzwxh:25851klzzwxh:25852klzzwxh:25853 klzzwxh:25200status = STATUSklzzwxh:25201MARKEDklzzwxh:25202ROLLBACK;klzzwxh:26598klzzwxh:25854klzzwxh:25855klzzwxh:25856klzzwxh:25857klzzwxh:25858klzzwxh:25859klzzwxh:25860klzzwxh:25861klzzwxh:25862klzzwxh:25863klzzwxh:25864klzzwxh:25865klzzwxh:25866klzzwxh:25867klzzwxh:25868 internalRollbackklzzwxh:25203klzzwxh:25204;klzzwxh:26599klzzwxh:25869klzzwxh:25870klzzwxh:25871klzzwxh:25872klzzwxh:25873klzzwxh:25874klzzwxh:25875klzzwxh:25876klzzwxh:25877klzzwxh:25878klzzwxh:25879klzzwxh:25880klzzwxh:25881klzzwxh:25882klzzwxh:25883 throw new HeuristicRollbackExceptionklzzwxh:25205 Messages.messageklzzwxh:25206 klzzwxh:25884tyrex.tx.rolledbackklzzwxh:25885 klzzwxh:25207 klzzwxh:25208;klzzwxh:26600klzzwxh:25886klzzwxh:25887klzzwxh:25888klzzwxh:25889klzzwxh:25890klzzwxh:25891klzzwxh:25892klzzwxh:25893klzzwxh:25894klzzwxh:25895klzzwxh:25896 klzzwxh:25209 finally klzzwxh:25210 klzzwxh:26601klzzwxh:25897klzzwxh:25898klzzwxh:25899klzzwxh:25900klzzwxh:25901klzzwxh:25902klzzwxh:25903klzzwxh:25904klzzwxh:25905klzzwxh:25906klzzwxh:25907klzzwxh:25908klzzwxh:25909klzzwxh:25910klzzwxh:25911 // The transaction will now tell all it's resources toklzzwxh:26602klzzwxh:25912klzzwxh:25913klzzwxh:25914klzzwxh:25915klzzwxh:25916klzzwxh:25917klzzwxh:25918klzzwxh:25919klzzwxh:25920klzzwxh:25921klzzwxh:25922klzzwxh:25923klzzwxh:25924klzzwxh:25925klzzwxh:25926 // forget about the transaction and will release allklzzwxh:26603klzzwxh:25927klzzwxh:25928klzzwxh:25929klzzwxh:25930klzzwxh:25931klzzwxh:25932klzzwxh:25933klzzwxh:25934klzzwxh:25935klzzwxh:25936klzzwxh:25937klzzwxh:25938klzzwxh:25939klzzwxh:25940klzzwxh:25941 // held resources. Also notifies all the synchronizationklzzwxh:26604klzzwxh:25942klzzwxh:25943klzzwxh:25944klzzwxh:25945klzzwxh:25946klzzwxh:25947klzzwxh:25948klzzwxh:25949klzzwxh:25950klzzwxh:25951klzzwxh:25952klzzwxh:25953klzzwxh:25954klzzwxh:25955klzzwxh:25956 // objects that the transaction has completed with a status.klzzwxh:26605klzzwxh:25957klzzwxh:25958klzzwxh:25959klzzwxh:25960klzzwxh:25961klzzwxh:25962klzzwxh:25963klzzwxh:25964klzzwxh:25965klzzwxh:25966klzzwxh:25967klzzwxh:25968klzzwxh:25969klzzwxh:25970klzzwxh:25971 try klzzwxh:25211klzzwxh:26606klzzwxh:25972klzzwxh:25973klzzwxh:25974klzzwxh:25975klzzwxh:25976klzzwxh:25977klzzwxh:25978klzzwxh:25979klzzwxh:25980klzzwxh:25981klzzwxh:25982klzzwxh:25983klzzwxh:25984klzzwxh:25985klzzwxh:25986klzzwxh:25987klzzwxh:25988klzzwxh:25989klzzwxh:25990 forgetklzzwxh:25212 Heuristic.ROLLBACK klzzwxh:25213;klzzwxh:26607klzzwxh:25991klzzwxh:25992klzzwxh:25993klzzwxh:25994klzzwxh:25995klzzwxh:25996klzzwxh:25997klzzwxh:25998klzzwxh:25999klzzwxh:26000klzzwxh:26001klzzwxh:26002klzzwxh:26003klzzwxh:26004klzzwxh:26005 klzzwxh:25214 catch klzzwxh:25215 IllegalStateException except klzzwxh:25216 klzzwxh:25217 klzzwxh:25218klzzwxh:26608klzzwxh:26006klzzwxh:26007klzzwxh:26008klzzwxh:26009klzzwxh:26010klzzwxh:26011klzzwxh:26012klzzwxh:26013klzzwxh:26014klzzwxh:26015klzzwxh:26016 klzzwxh:25219klzzwxh:26609klzzwxh:26017klzzwxh:26018klzzwxh:26019klzzwxh:26020klzzwxh:26021klzzwxh:26022klzzwxh:26023klzzwxh:26024klzzwxh:26025klzzwxh:26026klzzwxh:26027 klzzwxh:26610klzzwxh:26028klzzwxh:26029klzzwxh:26030klzzwxh:26031klzzwxh:26032klzzwxh:26033klzzwxh:26034 case Heuristic.COMMIT:klzzwxh:26611klzzwxh:26035klzzwxh:26036klzzwxh:26037klzzwxh:26038klzzwxh:26039klzzwxh:26040klzzwxh:26041 default:klzzwxh:26612klzzwxh:26042klzzwxh:26043klzzwxh:26044klzzwxh:26045klzzwxh:26046klzzwxh:26047klzzwxh:26048klzzwxh:26049klzzwxh:26050klzzwxh:26051klzzwxh:26052 try klzzwxh:25220klzzwxh:26613klzzwxh:26053klzzwxh:26054klzzwxh:26055klzzwxh:26056klzzwxh:26057klzzwxh:26058klzzwxh:26059klzzwxh:26060klzzwxh:26061klzzwxh:26062klzzwxh:26063klzzwxh:26064klzzwxh:26065klzzwxh:26066klzzwxh:26067 internalCommitklzzwxh:25221 canUseOnePhaseCommit klzzwxh:25222;klzzwxh:26614klzzwxh:26068klzzwxh:26069klzzwxh:26070klzzwxh:26071klzzwxh:26072klzzwxh:26073klzzwxh:26074klzzwxh:26075klzzwxh:26076klzzwxh:26077klzzwxh:26078 klzzwxh:25223 finally klzzwxh:25224 klzzwxh:26615klzzwxh:26079klzzwxh:26080klzzwxh:26081klzzwxh:26082klzzwxh:26083klzzwxh:26084klzzwxh:26085klzzwxh:26086klzzwxh:26087klzzwxh:26088klzzwxh:26089klzzwxh:26090klzzwxh:26091klzzwxh:26092klzzwxh:26093 // The transaction will now tell all it's resources toklzzwxh:26616klzzwxh:26094klzzwxh:26095klzzwxh:26096klzzwxh:26097klzzwxh:26098klzzwxh:26099klzzwxh:26100klzzwxh:26101klzzwxh:26102klzzwxh:26103klzzwxh:26104klzzwxh:26105klzzwxh:26106klzzwxh:26107klzzwxh:26108 // forget about the transaction and will release allklzzwxh:26617klzzwxh:26109klzzwxh:26110klzzwxh:26111klzzwxh:26112klzzwxh:26113klzzwxh:26114klzzwxh:26115klzzwxh:26116klzzwxh:26117klzzwxh:26118klzzwxh:26119klzzwxh:26120klzzwxh:26121klzzwxh:26122klzzwxh:26123 // held resources. Also notifies all the synchronizationklzzwxh:26618klzzwxh:26124klzzwxh:26125klzzwxh:26126klzzwxh:26127klzzwxh:26128klzzwxh:26129klzzwxh:26130klzzwxh:26131klzzwxh:26132klzzwxh:26133klzzwxh:26134klzzwxh:26135klzzwxh:26136klzzwxh:26137klzzwxh:26138 // objects that the transaction has completed with a status.klzzwxh:26619klzzwxh:26139klzzwxh:26140klzzwxh:26141klzzwxh:26142klzzwxh:26143klzzwxh:26144klzzwxh:26145klzzwxh:26146klzzwxh:26147klzzwxh:26148klzzwxh:26149klzzwxh:26150klzzwxh:26151klzzwxh:26152klzzwxh:26153 try klzzwxh:25225klzzwxh:26620klzzwxh:26154klzzwxh:26155klzzwxh:26156klzzwxh:26157klzzwxh:26158klzzwxh:26159klzzwxh:26160klzzwxh:26161klzzwxh:26162klzzwxh:26163klzzwxh:26164klzzwxh:26165klzzwxh:26166klzzwxh:26167klzzwxh:26168klzzwxh:26169klzzwxh:26170klzzwxh:26171klzzwxh:26172 forgetklzzwxh:25226 Heuristic.COMMIT klzzwxh:25227;klzzwxh:26621klzzwxh:26173klzzwxh:26174klzzwxh:26175klzzwxh:26176klzzwxh:26177klzzwxh:26178klzzwxh:26179klzzwxh:26180klzzwxh:26181klzzwxh:26182klzzwxh:26183klzzwxh:26184klzzwxh:26185klzzwxh:26186klzzwxh:26187 klzzwxh:25228 catch klzzwxh:25229 IllegalStateException except klzzwxh:25230 klzzwxh:25231 klzzwxh:25232klzzwxh:26188klzzwxh:26189klzzwxh:26190 klzzwxh:26622klzzwxh:26191klzzwxh:26192klzzwxh:26193klzzwxh:26194klzzwxh:26195klzzwxh:26196klzzwxh:26197klzzwxh:26198klzzwxh:26199klzzwxh:26200klzzwxh:26201 klzzwxh:25233klzzwxh:26623klzzwxh:26202klzzwxh:26203klzzwxh:26204klzzwxh:26205klzzwxh:26206klzzwxh:26207klzzwxh:26208 klzzwxh:25234klzzwxh:26624klzzwxh:26209klzzwxh:26210klzzwxh:26211klzzwxh:26212klzzwxh:26213klzzwxh:26214klzzwxh:26215 klzzwxh:26625klzzwxh:26216klzzwxh:26217klzzwxh:26218klzzwxh:26219klzzwxh:26220klzzwxh:26221klzzwxh:26222 // If an error has been encountered during 2pc,klzzwxh:26626klzzwxh:26223klzzwxh:26224klzzwxh:26225klzzwxh:26226klzzwxh:26227klzzwxh:26228klzzwxh:26229 // we must report it accordingly. I believe thisklzzwxh:26627klzzwxh:26230klzzwxh:26231klzzwxh:26232klzzwxh:26233klzzwxh:26234klzzwxh:26235klzzwxh:26236 // supercedes reporting a system error;klzzwxh:26628klzzwxh:26237klzzwxh:26238klzzwxh:26239klzzwxh:26240klzzwxh:26241klzzwxh:26242klzzwxh:26243 switch klzzwxh:25235 klzzwxh:25236heuristic klzzwxh:25237 klzzwxh:25238klzzwxh:26629klzzwxh:26244klzzwxh:26245klzzwxh:26246klzzwxh:26247klzzwxh:26248klzzwxh:26249klzzwxh:26250 case Heuristic.ROLLBACK:klzzwxh:26630klzzwxh:26251klzzwxh:26252klzzwxh:26253klzzwxh:26254klzzwxh:26255klzzwxh:26256klzzwxh:26257klzzwxh:26258klzzwxh:26259klzzwxh:26260klzzwxh:26261 // Transaction was completed rolled back at theklzzwxh:26631klzzwxh:26262klzzwxh:26263klzzwxh:26264klzzwxh:26265klzzwxh:26266klzzwxh:26267klzzwxh:26268klzzwxh:26269klzzwxh:26270klzzwxh:26271klzzwxh:26272 // request of one of it's resources. We don'tklzzwxh:26632klzzwxh:26273klzzwxh:26274klzzwxh:26275klzzwxh:26276klzzwxh:26277klzzwxh:26278klzzwxh:26279klzzwxh:26280klzzwxh:26281klzzwxh:26282klzzwxh:26283 // get to this point if it has been marked forklzzwxh:26633klzzwxh:26284klzzwxh:26285klzzwxh:26286klzzwxh:26287klzzwxh:26288klzzwxh:26289klzzwxh:26290klzzwxh:26291klzzwxh:26292klzzwxh:26293klzzwxh:26294 // roll back.klzzwxh:26634klzzwxh:26295klzzwxh:26296klzzwxh:26297klzzwxh:26298klzzwxh:26299klzzwxh:26300klzzwxh:26301klzzwxh:26302klzzwxh:26303klzzwxh:26304klzzwxh:26305 throw new HeuristicRollbackExceptionklzzwxh:25239 Messages.messageklzzwxh:25240 klzzwxh:26306tyrex.tx.heuristicRollbackklzzwxh:26307 klzzwxh:25241 klzzwxh:25242;klzzwxh:26635klzzwxh:26308klzzwxh:26309klzzwxh:26310klzzwxh:26311klzzwxh:26312klzzwxh:26313klzzwxh:26314 case Heuristic.MIXED:klzzwxh:26636klzzwxh:26315klzzwxh:26316klzzwxh:26317klzzwxh:26318klzzwxh:26319klzzwxh:26320klzzwxh:26321klzzwxh:26322klzzwxh:26323klzzwxh:26324klzzwxh:26325 // Transaction has partially commited and partiallyklzzwxh:26637klzzwxh:26326klzzwxh:26327klzzwxh:26328klzzwxh:26329klzzwxh:26330klzzwxh:26331klzzwxh:26332klzzwxh:26333klzzwxh:26334klzzwxh:26335klzzwxh:26336 // rolledback.klzzwxh:26638klzzwxh:26337klzzwxh:26338klzzwxh:26339klzzwxh:26340klzzwxh:26341klzzwxh:26342klzzwxh:26343klzzwxh:26344klzzwxh:26345klzzwxh:26346klzzwxh:26347 throw new HeuristicMixedExceptionklzzwxh:25243 Messages.messageklzzwxh:25244 klzzwxh:26348tyrex.tx.heuristicMixedklzzwxh:26349 klzzwxh:25245 klzzwxh:25246;klzzwxh:26639klzzwxh:26350klzzwxh:26351klzzwxh:26352klzzwxh:26353klzzwxh:26354klzzwxh:26355klzzwxh:26356 case Heuristic.HAZARD:klzzwxh:26640klzzwxh:26357klzzwxh:26358klzzwxh:26359klzzwxh:26360klzzwxh:26361klzzwxh:26362klzzwxh:26363klzzwxh:26364klzzwxh:26365klzzwxh:26366klzzwxh:26367 throw new HeuristicMixedExceptionklzzwxh:25247 Messages.messageklzzwxh:25248 klzzwxh:26368tyrex.tx.heuristicHazardklzzwxh:26369 klzzwxh:25249 klzzwxh:25250;klzzwxh:26641klzzwxh:26370klzzwxh:26371klzzwxh:26372klzzwxh:26373klzzwxh:26374klzzwxh:26375klzzwxh:26376 case Heuristic.OTHER:klzzwxh:26642klzzwxh:26377klzzwxh:26378klzzwxh:26379klzzwxh:26380klzzwxh:26381klzzwxh:26382klzzwxh:26383klzzwxh:26384klzzwxh:26385klzzwxh:26386klzzwxh:26387 // if there is a system error throw itklzzwxh:26643klzzwxh:26388klzzwxh:26389klzzwxh:26390klzzwxh:26391klzzwxh:26392klzzwxh:26393klzzwxh:26394klzzwxh:26395klzzwxh:26396klzzwxh:26397klzzwxh:26398 if klzzwxh:25251 klzzwxh:25252sysError klzzwxh:25253= null klzzwxh:25254klzzwxh:26644klzzwxh:26399klzzwxh:26400klzzwxh:26401klzzwxh:26402klzzwxh:26403klzzwxh:26404klzzwxh:26405klzzwxh:26406klzzwxh:26407klzzwxh:26408klzzwxh:26409klzzwxh:26410klzzwxh:26411klzzwxh:26412klzzwxh:26413 throw klzzwxh:25255sysError;klzzwxh:26645klzzwxh:26414klzzwxh:26415klzzwxh:26416klzzwxh:26417klzzwxh:26418klzzwxh:26419klzzwxh:26420klzzwxh:26421klzzwxh:26422klzzwxh:26423klzzwxh:26424 elseklzzwxh:26646klzzwxh:26425klzzwxh:26426klzzwxh:26427klzzwxh:26428klzzwxh:26429klzzwxh:26430klzzwxh:26431klzzwxh:26432klzzwxh:26433klzzwxh:26434klzzwxh:26435klzzwxh:26436klzzwxh:26437klzzwxh:26438klzzwxh:26439 throw new SystemExceptionklzzwxh:25256klzzwxh:26440Unknown exception occurredklzzwxh:26441klzzwxh:25257;klzzwxh:26647klzzwxh:26442klzzwxh:26443klzzwxh:26444klzzwxh:26445klzzwxh:26446klzzwxh:26447klzzwxh:26448 case Heuristic.COMMIT:klzzwxh:26648klzzwxh:26449klzzwxh:26450klzzwxh:26451klzzwxh:26452klzzwxh:26453klzzwxh:26454klzzwxh:26455 default:klzzwxh:26649klzzwxh:26456klzzwxh:26457klzzwxh:26458klzzwxh:26459klzzwxh:26460klzzwxh:26461klzzwxh:26462klzzwxh:26463klzzwxh:26464klzzwxh:26465klzzwxh:26466 // Transaction completed successfuly, even ifklzzwxh:26650klzzwxh:26467klzzwxh:26468klzzwxh:26469klzzwxh:26470klzzwxh:26471klzzwxh:26472klzzwxh:26473klzzwxh:26474klzzwxh:26475klzzwxh:26476klzzwxh:26477 // a resource insisted on commiting it.klzzwxh:26651klzzwxh:26478klzzwxh:26479klzzwxh:26480klzzwxh:26481klzzwxh:26482klzzwxh:26483klzzwxh:26484klzzwxh:26485klzzwxh:26486klzzwxh:26487klzzwxh:26488 // If a system error occured during this stage, report it.klzzwxh:26652klzzwxh:26489klzzwxh:26490klzzwxh:26491klzzwxh:26492klzzwxh:26493klzzwxh:26494klzzwxh:26495klzzwxh:26496klzzwxh:26497klzzwxh:26498klzzwxh:26499 if klzzwxh:25258 klzzwxh:25259sysError klzzwxh:25260= null klzzwxh:25261klzzwxh:26653klzzwxh:26500klzzwxh:26501klzzwxh:26502klzzwxh:26503klzzwxh:26504klzzwxh:26505klzzwxh:26506klzzwxh:26507klzzwxh:26508klzzwxh:26509klzzwxh:26510klzzwxh:26511klzzwxh:26512klzzwxh:26513klzzwxh:26514 throw klzzwxh:25262sysError;klzzwxh:26654klzzwxh:26515klzzwxh:26516klzzwxh:26517klzzwxh:26518klzzwxh:26519klzzwxh:26520klzzwxh:26521klzzwxh:26522klzzwxh:26523klzzwxh:26524klzzwxh:26525 break;klzzwxh:26655klzzwxh:26526klzzwxh:26527klzzwxh:26528klzzwxh:26529klzzwxh:26530klzzwxh:26531klzzwxh:26532 klzzwxh:25263klzzwxh:26656klzzwxh:26533klzzwxh:26534klzzwxh:26535 klzzwxh:25264

klzzwxh:26673klzzwxh:26674klzzwxh:26675 /klzzwxh:26657klzzwxh:26658klzzwxh:26733klzzwxh:26676klzzwxh:26677klzzwxh:26678klzzwxh:26679 klzzwxh:26659 If this transaction is not the current transactionklzzwxh:26734klzzwxh:26680klzzwxh:26681klzzwxh:26682klzzwxh:26683 klzzwxh:26660 of the current thread then make this transactionklzzwxh:26735klzzwxh:26684klzzwxh:26685klzzwxh:26686klzzwxh:26687 klzzwxh:26661 the transaction of the current thread and returnklzzwxh:26736klzzwxh:26688klzzwxh:26689klzzwxh:26690klzzwxh:26691 klzzwxh:26662 the original transaction of the current thread. Elseklzzwxh:26737klzzwxh:26692klzzwxh:26693klzzwxh:26694klzzwxh:26695 klzzwxh:26663 if transaction is the current transaction do nothingklzzwxh:26738klzzwxh:26696klzzwxh:26697klzzwxh:26698klzzwxh:26699 klzzwxh:26664 and return null.klzzwxh:26739klzzwxh:26700klzzwxh:26701klzzwxh:26702klzzwxh:26703 klzzwxh:26665klzzwxh:26740klzzwxh:26704klzzwxh:26705klzzwxh:26706klzzwxh:26707 klzzwxh:26666 @return return the transaction of the current threadklzzwxh:26741klzzwxh:26708klzzwxh:26709klzzwxh:26710klzzwxh:26711 klzzwxh:26667 if this transaction is not the current transactionklzzwxh:26742klzzwxh:26712klzzwxh:26713klzzwxh:26714klzzwxh:26715 klzzwxh:26668 of the current thread. Else return null.klzzwxh:26743klzzwxh:26716klzzwxh:26717klzzwxh:26718klzzwxh:26719 klzzwxh:26669/klzzwxh:26744klzzwxh:26720klzzwxh:26721klzzwxh:26722 private Transaction makeCurrentTransactionIfNecessaryklzzwxh:26670klzzwxh:26671klzzwxh:26745klzzwxh:26723klzzwxh:26724klzzwxh:26725 klzzwxh:26672klzzwxh:26746klzzwxh:26726klzzwxh:26727klzzwxh:26728klzzwxh:26729klzzwxh:26730klzzwxh:26731klzzwxh:26732 Transaction result = null;

klzzwxh:26776klzzwxh:26777klzzwxh:26778klzzwxh:26779klzzwxh:26780klzzwxh:26781klzzwxh:26782 try klzzwxh:26747klzzwxh:26929klzzwxh:26783klzzwxh:26784klzzwxh:26785klzzwxh:26786klzzwxh:26787klzzwxh:26788klzzwxh:26789klzzwxh:26790klzzwxh:26791klzzwxh:26792klzzwxh:26793 if klzzwxh:26748 klzzwxh:26749txDomain.klzzwxh:26750txManager.getTransactionklzzwxh:26751klzzwxh:26752 klzzwxh:26753= this klzzwxh:26754 klzzwxh:26755klzzwxh:26930klzzwxh:26794klzzwxh:26795klzzwxh:26796klzzwxh:26797klzzwxh:26798klzzwxh:26799klzzwxh:26800klzzwxh:26801klzzwxh:26802klzzwxh:26803klzzwxh:26804klzzwxh:26805klzzwxh:26806klzzwxh:26807klzzwxh:26808 result = klzzwxh:26756txDomain.klzzwxh:26757txManager.suspendklzzwxh:26758klzzwxh:26759;klzzwxh:26931klzzwxh:26809klzzwxh:26810klzzwxh:26811klzzwxh:26812klzzwxh:26813klzzwxh:26814klzzwxh:26815klzzwxh:26816klzzwxh:26817klzzwxh:26818klzzwxh:26819klzzwxh:26820klzzwxh:26821klzzwxh:26822klzzwxh:26823 // could move this out of priviledged blockklzzwxh:26932klzzwxh:26824klzzwxh:26825klzzwxh:26826klzzwxh:26827klzzwxh:26828klzzwxh:26829klzzwxh:26830klzzwxh:26831klzzwxh:26832klzzwxh:26833klzzwxh:26834klzzwxh:26835klzzwxh:26836klzzwxh:26837klzzwxh:26838 // to make priviledged block smaller. notklzzwxh:26933klzzwxh:26839klzzwxh:26840klzzwxh:26841klzzwxh:26842klzzwxh:26843klzzwxh:26844klzzwxh:26845klzzwxh:26846klzzwxh:26847klzzwxh:26848klzzwxh:26849klzzwxh:26850klzzwxh:26851klzzwxh:26852klzzwxh:26853 // a big dealklzzwxh:26934klzzwxh:26854klzzwxh:26855klzzwxh:26856klzzwxh:26857klzzwxh:26858klzzwxh:26859klzzwxh:26860klzzwxh:26861klzzwxh:26862klzzwxh:26863klzzwxh:26864klzzwxh:26865klzzwxh:26866klzzwxh:26867klzzwxh:26868 klzzwxh:26760txDomain.klzzwxh:26761txManager.internalResumeklzzwxh:26762 this klzzwxh:26763;klzzwxh:26869klzzwxh:26870klzzwxh:26871 klzzwxh:26935klzzwxh:26872klzzwxh:26873klzzwxh:26874klzzwxh:26875klzzwxh:26876klzzwxh:26877klzzwxh:26878klzzwxh:26879klzzwxh:26880klzzwxh:26881klzzwxh:26882 klzzwxh:26764klzzwxh:26936klzzwxh:26883klzzwxh:26884klzzwxh:26885klzzwxh:26886klzzwxh:26887klzzwxh:26888klzzwxh:26889 klzzwxh:26765 catch klzzwxh:26766 Exception except klzzwxh:26767 klzzwxh:26768klzzwxh:26937klzzwxh:26890klzzwxh:26891klzzwxh:26892klzzwxh:26893klzzwxh:26894klzzwxh:26895klzzwxh:26896klzzwxh:26897klzzwxh:26898klzzwxh:26899klzzwxh:26900 klzzwxh:26769status = STATUSklzzwxh:26770MARKEDklzzwxh:26771ROLLBACK;klzzwxh:26938klzzwxh:26901klzzwxh:26902klzzwxh:26903klzzwxh:26904klzzwxh:26905klzzwxh:26906klzzwxh:26907klzzwxh:26908klzzwxh:26909klzzwxh:26910klzzwxh:26911 errorklzzwxh:26772 except klzzwxh:26773;klzzwxh:26939klzzwxh:26912klzzwxh:26913klzzwxh:26914klzzwxh:26915klzzwxh:26916klzzwxh:26917klzzwxh:26918 klzzwxh:26774klzzwxh:26940klzzwxh:26919klzzwxh:26920klzzwxh:26921klzzwxh:26922klzzwxh:26923klzzwxh:26924klzzwxh:26925 return result;klzzwxh:26941klzzwxh:26926klzzwxh:26927klzzwxh:26928 klzzwxh:26775

klzzwxh:26981klzzwxh:26982klzzwxh:26983 /klzzwxh:26942klzzwxh:26943klzzwxh:27114klzzwxh:26984klzzwxh:26985klzzwxh:26986klzzwxh:26987 klzzwxh:26944 Make the specified transaction the current klzzwxh:27115klzzwxh:26988klzzwxh:26989klzzwxh:26990klzzwxh:26991 klzzwxh:26945 transaction of the current thread.klzzwxh:27116klzzwxh:26992klzzwxh:26993klzzwxh:26994klzzwxh:26995 klzzwxh:26946klzzwxh:27117klzzwxh:26996klzzwxh:26997klzzwxh:26998klzzwxh:26999 klzzwxh:26947 @param transaction the transaction to make asklzzwxh:27118klzzwxh:27000klzzwxh:27001klzzwxh:27002klzzwxh:27003 klzzwxh:26948 the current transaction of the current thread.klzzwxh:27119klzzwxh:27004klzzwxh:27005klzzwxh:27006klzzwxh:27007 klzzwxh:26949/klzzwxh:27120klzzwxh:27008klzzwxh:27009klzzwxh:27010 private void resumeTransactionklzzwxh:26950 final Transaction transaction klzzwxh:26951klzzwxh:27121klzzwxh:27011klzzwxh:27012klzzwxh:27013 klzzwxh:26952klzzwxh:27122klzzwxh:27014klzzwxh:27015klzzwxh:27016klzzwxh:27017klzzwxh:27018klzzwxh:27019klzzwxh:27020 try klzzwxh:26953klzzwxh:27123klzzwxh:27021klzzwxh:27022klzzwxh:27023klzzwxh:27024klzzwxh:27025klzzwxh:27026klzzwxh:27027klzzwxh:27028klzzwxh:27029klzzwxh:27030klzzwxh:27031 klzzwxh:26954txDomain.klzzwxh:26955txManager.suspendklzzwxh:26956klzzwxh:26957;klzzwxh:27124klzzwxh:27032klzzwxh:27033klzzwxh:27034klzzwxh:27035klzzwxh:27036klzzwxh:27037klzzwxh:27038 klzzwxh:26958 catch klzzwxh:26959 Exception except klzzwxh:26960 klzzwxh:26961klzzwxh:27125klzzwxh:27039klzzwxh:27040klzzwxh:27041klzzwxh:27042klzzwxh:27043klzzwxh:27044klzzwxh:27045klzzwxh:27046klzzwxh:27047klzzwxh:27048klzzwxh:27049 errorklzzwxh:26962 except klzzwxh:26963;klzzwxh:27126klzzwxh:27050klzzwxh:27051klzzwxh:27052klzzwxh:27053klzzwxh:27054klzzwxh:27055klzzwxh:27056 klzzwxh:26964klzzwxh:27127klzzwxh:27057klzzwxh:27058klzzwxh:27059klzzwxh:27060klzzwxh:27061klzzwxh:27062klzzwxh:27063 try klzzwxh:26965klzzwxh:27128klzzwxh:27064klzzwxh:27065klzzwxh:27066klzzwxh:27067klzzwxh:27068klzzwxh:27069klzzwxh:27070klzzwxh:27071klzzwxh:27072klzzwxh:27073klzzwxh:27074 klzzwxh:26966txDomain.klzzwxh:26967txManager.resumeklzzwxh:26968 transaction klzzwxh:26969;klzzwxh:27129klzzwxh:27075klzzwxh:27076klzzwxh:27077klzzwxh:27078klzzwxh:27079klzzwxh:27080klzzwxh:27081 klzzwxh:26970 catch klzzwxh:26971 Exception except klzzwxh:26972 klzzwxh:26973klzzwxh:27130klzzwxh:27082klzzwxh:27083klzzwxh:27084klzzwxh:27085klzzwxh:27086klzzwxh:27087klzzwxh:27088klzzwxh:27089klzzwxh:27090klzzwxh:27091klzzwxh:27092 klzzwxh:26974status = STATUSklzzwxh:26975MARKEDklzzwxh:26976ROLLBACK;klzzwxh:27131klzzwxh:27093klzzwxh:27094klzzwxh:27095klzzwxh:27096klzzwxh:27097klzzwxh:27098klzzwxh:27099klzzwxh:27100klzzwxh:27101klzzwxh:27102klzzwxh:27103 errorklzzwxh:26977 except klzzwxh:26978;klzzwxh:27132klzzwxh:27104klzzwxh:27105klzzwxh:27106klzzwxh:27107klzzwxh:27108klzzwxh:27109klzzwxh:27110 klzzwxh:26979klzzwxh:27133klzzwxh:27111klzzwxh:27112klzzwxh:27113 klzzwxh:26980

klzzwxh:27142klzzwxh:27143klzzwxh:27144 /klzzwxh:27134klzzwxh:27135klzzwxh:27181klzzwxh:27145klzzwxh:27146klzzwxh:27147klzzwxh:27148 klzzwxh:27136 Inform the Synchronization objects that the transactionklzzwxh:27182klzzwxh:27149klzzwxh:27150klzzwxh:27151klzzwxh:27152 klzzwxh:27137 completion process is about to start.klzzwxh:27183klzzwxh:27153klzzwxh:27154klzzwxh:27155klzzwxh:27156 klzzwxh:27138/klzzwxh:27184klzzwxh:27157klzzwxh:27158klzzwxh:27159 private void beforeCompletionklzzwxh:27139klzzwxh:27140klzzwxh:27185klzzwxh:27160klzzwxh:27161klzzwxh:27162 klzzwxh:27141klzzwxh:27186klzzwxh:27163klzzwxh:27164klzzwxh:27165klzzwxh:27166klzzwxh:27167klzzwxh:27168klzzwxh:27169 Transactionklzzwxh:27170klzzwxh:27171klzzwxh:27172klzzwxh:27173 suspended;klzzwxh:27187klzzwxh:27174klzzwxh:27175klzzwxh:27176klzzwxh:27177klzzwxh:27178klzzwxh:27179klzzwxh:27180 Synchronization sync;

klzzwxh:27241klzzwxh:27242klzzwxh:27243klzzwxh:27244klzzwxh:27245klzzwxh:27246klzzwxh:27247 // First, notify all the synchronization objects thatklzzwxh:27776klzzwxh:27248klzzwxh:27249klzzwxh:27250klzzwxh:27251klzzwxh:27252klzzwxh:27253klzzwxh:27254 // we are about to complete a transaction. They mightklzzwxh:27777klzzwxh:27255klzzwxh:27256klzzwxh:27257klzzwxh:27258klzzwxh:27259klzzwxh:27260klzzwxh:27261 // decide to roll back the transaction, in which caseklzzwxh:27778klzzwxh:27262klzzwxh:27263klzzwxh:27264klzzwxh:27265klzzwxh:27266klzzwxh:27267klzzwxh:27268 // we'll do a rollback.klzzwxh:27779klzzwxh:27269klzzwxh:27270klzzwxh:27271klzzwxh:27272klzzwxh:27273klzzwxh:27274klzzwxh:27275 // might decide to rollback the transaction.klzzwxh:27780klzzwxh:27276klzzwxh:27277klzzwxh:27278klzzwxh:27279klzzwxh:27280klzzwxh:27281klzzwxh:27282 if klzzwxh:27188 klzzwxh:27189syncs klzzwxh:27190= null klzzwxh:27191 klzzwxh:27192klzzwxh:27781klzzwxh:27283klzzwxh:27284klzzwxh:27285klzzwxh:27286klzzwxh:27287klzzwxh:27288klzzwxh:27289klzzwxh:27290klzzwxh:27291klzzwxh:27292klzzwxh:27293 klzzwxh:27782klzzwxh:27294klzzwxh:27295klzzwxh:27296klzzwxh:27297klzzwxh:27298klzzwxh:27299klzzwxh:27300klzzwxh:27301klzzwxh:27302klzzwxh:27303klzzwxh:27304 // If we are not running in the same thread asklzzwxh:27783klzzwxh:27305klzzwxh:27306klzzwxh:27307klzzwxh:27308klzzwxh:27309klzzwxh:27310klzzwxh:27311klzzwxh:27312klzzwxh:27313klzzwxh:27314klzzwxh:27315 // this transaction, need to make this transactionklzzwxh:27784klzzwxh:27316klzzwxh:27317klzzwxh:27318klzzwxh:27319klzzwxh:27320klzzwxh:27321klzzwxh:27322klzzwxh:27323klzzwxh:27324klzzwxh:27325klzzwxh:27326 // the current one before calling method.klzzwxh:27785klzzwxh:27327klzzwxh:27328klzzwxh:27329klzzwxh:27330klzzwxh:27331klzzwxh:27332klzzwxh:27333klzzwxh:27334klzzwxh:27335klzzwxh:27336klzzwxh:27337 // do in a priveledged blockklzzwxh:27786klzzwxh:27338klzzwxh:27339klzzwxh:27340klzzwxh:27341klzzwxh:27342klzzwxh:27343klzzwxh:27344klzzwxh:27345klzzwxh:27346klzzwxh:27347klzzwxh:27348 suspended = makeCurrentTransactionIfNecessaryklzzwxh:27193klzzwxh:27194;klzzwxh:27787klzzwxh:27349klzzwxh:27350klzzwxh:27351klzzwxh:27352klzzwxh:27353klzzwxh:27354klzzwxh:27355klzzwxh:27356klzzwxh:27357klzzwxh:27358klzzwxh:27359 klzzwxh:27788klzzwxh:27360klzzwxh:27361klzzwxh:27362klzzwxh:27363klzzwxh:27364klzzwxh:27365klzzwxh:27366klzzwxh:27367klzzwxh:27368klzzwxh:27369klzzwxh:27370 // Do not notify of completion if we alreadyklzzwxh:27789klzzwxh:27371klzzwxh:27372klzzwxh:27373klzzwxh:27374klzzwxh:27375klzzwxh:27376klzzwxh:27377klzzwxh:27378klzzwxh:27379klzzwxh:27380klzzwxh:27381 // decided to roll back the transaction.klzzwxh:27790klzzwxh:27382klzzwxh:27383klzzwxh:27384klzzwxh:27385klzzwxh:27386klzzwxh:27387klzzwxh:27388klzzwxh:27389klzzwxh:27390klzzwxh:27391klzzwxh:27392 if klzzwxh:27195 klzzwxh:27196status klzzwxh:27197= STATUSklzzwxh:27198MARKEDklzzwxh:27199ROLLBACK klzzwxh:27200 klzzwxh:27201klzzwxh:27791klzzwxh:27393klzzwxh:27394klzzwxh:27395klzzwxh:27396klzzwxh:27397klzzwxh:27398klzzwxh:27399klzzwxh:27400klzzwxh:27401klzzwxh:27402klzzwxh:27403klzzwxh:27404klzzwxh:27405klzzwxh:27406klzzwxh:27407 for klzzwxh:27202 int i = 0 ; i klzzwxh:27408 klzzwxh:27203syncs.length ; ++i klzzwxh:27204 klzzwxh:27205klzzwxh:27792klzzwxh:27409klzzwxh:27410klzzwxh:27411klzzwxh:27412klzzwxh:27413klzzwxh:27414klzzwxh:27415klzzwxh:27416klzzwxh:27417klzzwxh:27418klzzwxh:27419klzzwxh:27420klzzwxh:27421klzzwxh:27422klzzwxh:27423klzzwxh:27424klzzwxh:27425klzzwxh:27426klzzwxh:27427 sync = klzzwxh:27206syncsklzzwxh:27207 i klzzwxh:27208;klzzwxh:27793klzzwxh:27428klzzwxh:27429klzzwxh:27430klzzwxh:27431klzzwxh:27432klzzwxh:27433klzzwxh:27434klzzwxh:27435klzzwxh:27436klzzwxh:27437klzzwxh:27438klzzwxh:27439klzzwxh:27440klzzwxh:27441klzzwxh:27442klzzwxh:27443klzzwxh:27444klzzwxh:27445klzzwxh:27446 if klzzwxh:27209 sync == null klzzwxh:27210klzzwxh:27794klzzwxh:27447klzzwxh:27448klzzwxh:27449klzzwxh:27450klzzwxh:27451klzzwxh:27452klzzwxh:27453klzzwxh:27454klzzwxh:27455klzzwxh:27456klzzwxh:27457klzzwxh:27458klzzwxh:27459klzzwxh:27460klzzwxh:27461klzzwxh:27462klzzwxh:27463klzzwxh:27464klzzwxh:27465klzzwxh:27466klzzwxh:27467klzzwxh:27468klzzwxh:27469 break;klzzwxh:27795klzzwxh:27470klzzwxh:27471klzzwxh:27472klzzwxh:27473klzzwxh:27474klzzwxh:27475klzzwxh:27476klzzwxh:27477klzzwxh:27478klzzwxh:27479klzzwxh:27480klzzwxh:27481klzzwxh:27482klzzwxh:27483klzzwxh:27484klzzwxh:27485klzzwxh:27486klzzwxh:27487klzzwxh:27488 try klzzwxh:27211klzzwxh:27796klzzwxh:27489klzzwxh:27490klzzwxh:27491klzzwxh:27492klzzwxh:27493klzzwxh:27494klzzwxh:27495klzzwxh:27496klzzwxh:27497klzzwxh:27498klzzwxh:27499klzzwxh:27500klzzwxh:27501klzzwxh:27502klzzwxh:27503klzzwxh:27504klzzwxh:27505klzzwxh:27506klzzwxh:27507klzzwxh:27508klzzwxh:27509klzzwxh:27510klzzwxh:27511 sync.beforeCompletionklzzwxh:27212klzzwxh:27213;klzzwxh:27797klzzwxh:27512klzzwxh:27513klzzwxh:27514klzzwxh:27515klzzwxh:27516klzzwxh:27517klzzwxh:27518klzzwxh:27519klzzwxh:27520klzzwxh:27521klzzwxh:27522klzzwxh:27523klzzwxh:27524klzzwxh:27525klzzwxh:27526klzzwxh:27527klzzwxh:27528klzzwxh:27529klzzwxh:27530 klzzwxh:27214 catch klzzwxh:27215 Exception except klzzwxh:27216 klzzwxh:27217klzzwxh:27798klzzwxh:27531klzzwxh:27532klzzwxh:27533klzzwxh:27534klzzwxh:27535klzzwxh:27536klzzwxh:27537klzzwxh:27538klzzwxh:27539klzzwxh:27540klzzwxh:27541klzzwxh:27542klzzwxh:27543klzzwxh:27544klzzwxh:27545klzzwxh:27546klzzwxh:27547klzzwxh:27548klzzwxh:27549klzzwxh:27550klzzwxh:27551klzzwxh:27552klzzwxh:27553 errorklzzwxh:27218 except klzzwxh:27219;klzzwxh:27799klzzwxh:27554klzzwxh:27555klzzwxh:27556klzzwxh:27557klzzwxh:27558klzzwxh:27559klzzwxh:27560klzzwxh:27561klzzwxh:27562klzzwxh:27563klzzwxh:27564klzzwxh:27565klzzwxh:27566klzzwxh:27567klzzwxh:27568klzzwxh:27569klzzwxh:27570klzzwxh:27571klzzwxh:27572klzzwxh:27573klzzwxh:27574klzzwxh:27575klzzwxh:27576 klzzwxh:27220status = STATUSklzzwxh:27221MARKEDklzzwxh:27222ROLLBACK;klzzwxh:27800klzzwxh:27577klzzwxh:27578klzzwxh:27579klzzwxh:27580klzzwxh:27581klzzwxh:27582klzzwxh:27583klzzwxh:27584klzzwxh:27585klzzwxh:27586klzzwxh:27587klzzwxh:27588klzzwxh:27589klzzwxh:27590klzzwxh:27591klzzwxh:27592klzzwxh:27593klzzwxh:27594klzzwxh:27595 klzzwxh:27223klzzwxh:27801klzzwxh:27596klzzwxh:27597klzzwxh:27598klzzwxh:27599klzzwxh:27600klzzwxh:27601klzzwxh:27602klzzwxh:27603klzzwxh:27604klzzwxh:27605klzzwxh:27606klzzwxh:27607klzzwxh:27608klzzwxh:27609klzzwxh:27610 klzzwxh:27224klzzwxh:27802klzzwxh:27611klzzwxh:27612klzzwxh:27613klzzwxh:27614klzzwxh:27615klzzwxh:27616klzzwxh:27617klzzwxh:27618klzzwxh:27619klzzwxh:27620klzzwxh:27621 klzzwxh:27225klzzwxh:27803klzzwxh:27622klzzwxh:27623klzzwxh:27624klzzwxh:27625klzzwxh:27626klzzwxh:27627klzzwxh:27628 klzzwxh:27804klzzwxh:27629klzzwxh:27630klzzwxh:27631klzzwxh:27632klzzwxh:27633klzzwxh:27634klzzwxh:27635klzzwxh:27636klzzwxh:27637klzzwxh:27638klzzwxh:27639 // Resume the previous transaction associated withklzzwxh:27805klzzwxh:27640klzzwxh:27641klzzwxh:27642klzzwxh:27643klzzwxh:27644klzzwxh:27645klzzwxh:27646klzzwxh:27647klzzwxh:27648klzzwxh:27649klzzwxh:27650 // the thread.klzzwxh:27806klzzwxh:27651klzzwxh:27652klzzwxh:27653klzzwxh:27654klzzwxh:27655klzzwxh:27656klzzwxh:27657klzzwxh:27658klzzwxh:27659klzzwxh:27660klzzwxh:27661 if klzzwxh:27226 suspended klzzwxh:27227= null klzzwxh:27228klzzwxh:27807klzzwxh:27662klzzwxh:27663klzzwxh:27664klzzwxh:27665klzzwxh:27666klzzwxh:27667klzzwxh:27668klzzwxh:27669klzzwxh:27670klzzwxh:27671klzzwxh:27672klzzwxh:27673klzzwxh:27674klzzwxh:27675klzzwxh:27676 resumeTransactionklzzwxh:27229 suspended klzzwxh:27230;klzzwxh:27808klzzwxh:27677klzzwxh:27678klzzwxh:27679klzzwxh:27680klzzwxh:27681klzzwxh:27682klzzwxh:27683 klzzwxh:27809klzzwxh:27684klzzwxh:27685klzzwxh:27686klzzwxh:27687klzzwxh:27688klzzwxh:27689klzzwxh:27690klzzwxh:27691klzzwxh:27692klzzwxh:27693klzzwxh:27694 if klzzwxh:27231 klzzwxh:27232status == STATUSklzzwxh:27233MARKEDklzzwxh:27234ROLLBACK klzzwxh:27235 klzzwxh:27236klzzwxh:27810klzzwxh:27695klzzwxh:27696klzzwxh:27697klzzwxh:27698klzzwxh:27699klzzwxh:27700klzzwxh:27701klzzwxh:27702klzzwxh:27703klzzwxh:27704klzzwxh:27705klzzwxh:27706klzzwxh:27707klzzwxh:27708klzzwxh:27709 // Status was changed to rollback or an error occured,klzzwxh:27811klzzwxh:27710klzzwxh:27711klzzwxh:27712klzzwxh:27713klzzwxh:27714klzzwxh:27715klzzwxh:27716klzzwxh:27717klzzwxh:27718klzzwxh:27719klzzwxh:27720klzzwxh:27721klzzwxh:27722klzzwxh:27723klzzwxh:27724 // either case we have a heuristic decision to rollback.klzzwxh:27812klzzwxh:27725klzzwxh:27726klzzwxh:27727klzzwxh:27728klzzwxh:27729klzzwxh:27730klzzwxh:27731klzzwxh:27732klzzwxh:27733klzzwxh:27734klzzwxh:27735klzzwxh:27736klzzwxh:27737klzzwxh:27738klzzwxh:27739 klzzwxh:27237heuristic = Heuristic.ROLLBACK;klzzwxh:27813klzzwxh:27740klzzwxh:27741klzzwxh:27742klzzwxh:27743klzzwxh:27744klzzwxh:27745klzzwxh:27746klzzwxh:27747klzzwxh:27748klzzwxh:27749klzzwxh:27750klzzwxh:27751klzzwxh:27752klzzwxh:27753klzzwxh:27754 return;klzzwxh:27814klzzwxh:27755klzzwxh:27756klzzwxh:27757klzzwxh:27758klzzwxh:27759klzzwxh:27760klzzwxh:27761klzzwxh:27762klzzwxh:27763klzzwxh:27764klzzwxh:27765 klzzwxh:27238klzzwxh:27815klzzwxh:27766klzzwxh:27767klzzwxh:27768klzzwxh:27769klzzwxh:27770klzzwxh:27771klzzwxh:27772 klzzwxh:27239klzzwxh:27816klzzwxh:27773klzzwxh:27774klzzwxh:27775 klzzwxh:27240

klzzwxh:27840klzzwxh:27841klzzwxh:27842 /klzzwxh:27817klzzwxh:27818klzzwxh:27902klzzwxh:27843klzzwxh:27844klzzwxh:27845klzzwxh:27846 klzzwxh:27819 If there any enlisted resources end them withklzzwxh:27903klzzwxh:27847klzzwxh:27848klzzwxh:27849klzzwxh:27850 klzzwxh:27820 with the flag XAResource.TMSUCCESS as the resourcesklzzwxh:27904klzzwxh:27851klzzwxh:27852klzzwxh:27853klzzwxh:27854 klzzwxh:27821 are to be committed.klzzwxh:27905klzzwxh:27855klzzwxh:27856klzzwxh:27857klzzwxh:27858 klzzwxh:27822 klzzwxh:27859Pklzzwxh:27860klzzwxh:27906klzzwxh:27861klzzwxh:27862klzzwxh:27863klzzwxh:27864 klzzwxh:27823 If an exception occurs set the system error andklzzwxh:27907klzzwxh:27865klzzwxh:27866klzzwxh:27867klzzwxh:27868 klzzwxh:27824 add klzzwxh:27825@link Heuristic.ROLLBACKklzzwxh:27826 to the currentklzzwxh:27908klzzwxh:27869klzzwxh:27870klzzwxh:27871klzzwxh:27872 klzzwxh:27827 heuristic. The heuristic is not normalized.klzzwxh:27909klzzwxh:27873klzzwxh:27874klzzwxh:27875klzzwxh:27876 klzzwxh:27828 @see klzzwxh:27829klzzwxh:27830enlistedklzzwxh:27910klzzwxh:27877klzzwxh:27878klzzwxh:27879klzzwxh:27880 klzzwxh:27831 @see klzzwxh:27832klzzwxh:27833heuristicklzzwxh:27911klzzwxh:27881klzzwxh:27882klzzwxh:27883klzzwxh:27884 klzzwxh:27834 @see klzzwxh:27835errorklzzwxh:27912klzzwxh:27885klzzwxh:27886klzzwxh:27887klzzwxh:27888 klzzwxh:27836/klzzwxh:27913klzzwxh:27889klzzwxh:27890klzzwxh:27891 private void endEnlistedResourcesForCommitklzzwxh:27837klzzwxh:27838klzzwxh:27914klzzwxh:27892klzzwxh:27893klzzwxh:27894 klzzwxh:27839klzzwxh:27915klzzwxh:27895klzzwxh:27896klzzwxh:27897klzzwxh:27898klzzwxh:27899klzzwxh:27900klzzwxh:27901 InternalXAResourceHolder resHolder;

klzzwxh:27935klzzwxh:27936klzzwxh:27937klzzwxh:27938klzzwxh:27939klzzwxh:27940klzzwxh:27941 // We always end these resources, even if we made a heuristicklzzwxh:28099klzzwxh:27942klzzwxh:27943klzzwxh:27944klzzwxh:27945klzzwxh:27946klzzwxh:27947klzzwxh:27948 // decision not to commit this transaction.klzzwxh:28100klzzwxh:27949klzzwxh:27950klzzwxh:27951klzzwxh:27952klzzwxh:27953klzzwxh:27954klzzwxh:27955 resHolder = klzzwxh:27916enlisted;klzzwxh:28101klzzwxh:27956klzzwxh:27957klzzwxh:27958klzzwxh:27959klzzwxh:27960klzzwxh:27961klzzwxh:27962 while klzzwxh:27917 resHolder klzzwxh:27918= null klzzwxh:27919 klzzwxh:27920klzzwxh:28102klzzwxh:27963klzzwxh:27964klzzwxh:27965klzzwxh:27966klzzwxh:27967klzzwxh:27968klzzwxh:27969klzzwxh:27970klzzwxh:27971klzzwxh:27972klzzwxh:27973 // Tell all the XAResources that their transactionklzzwxh:28103klzzwxh:27974klzzwxh:27975klzzwxh:27976klzzwxh:27977klzzwxh:27978klzzwxh:27979klzzwxh:27980klzzwxh:27981klzzwxh:27982klzzwxh:27983klzzwxh:27984 // has ended successfuly. klzzwxh:28104klzzwxh:27985klzzwxh:27986klzzwxh:27987klzzwxh:27988klzzwxh:27989klzzwxh:27990klzzwxh:27991klzzwxh:27992klzzwxh:27993klzzwxh:27994klzzwxh:27995 try klzzwxh:27921klzzwxh:28105klzzwxh:27996klzzwxh:27997klzzwxh:27998klzzwxh:27999klzzwxh:28000klzzwxh:28001klzzwxh:28002klzzwxh:28003klzzwxh:28004klzzwxh:28005klzzwxh:28006klzzwxh:28007klzzwxh:28008klzzwxh:28009klzzwxh:28010 endForTransactionBoundaryklzzwxh:27922 resHolder klzzwxh:27923;klzzwxh:28106klzzwxh:28011klzzwxh:28012klzzwxh:28013klzzwxh:28014klzzwxh:28015klzzwxh:28016klzzwxh:28017klzzwxh:28018klzzwxh:28019klzzwxh:28020klzzwxh:28021 klzzwxh:27924 catch klzzwxh:27925 Exception except klzzwxh:27926 klzzwxh:27927klzzwxh:28107klzzwxh:28022klzzwxh:28023klzzwxh:28024klzzwxh:28025klzzwxh:28026klzzwxh:28027klzzwxh:28028klzzwxh:28029klzzwxh:28030klzzwxh:28031klzzwxh:28032klzzwxh:28033klzzwxh:28034klzzwxh:28035klzzwxh:28036 // Error occured, we won't be commiting this transaction.klzzwxh:28108klzzwxh:28037klzzwxh:28038klzzwxh:28039klzzwxh:28040klzzwxh:28041klzzwxh:28042klzzwxh:28043klzzwxh:28044klzzwxh:28045klzzwxh:28046klzzwxh:28047klzzwxh:28048klzzwxh:28049klzzwxh:28050klzzwxh:28051 klzzwxh:27928heuristic |= Heuristic.ROLLBACK;klzzwxh:28109klzzwxh:28052klzzwxh:28053klzzwxh:28054klzzwxh:28055klzzwxh:28056klzzwxh:28057klzzwxh:28058klzzwxh:28059klzzwxh:28060klzzwxh:28061klzzwxh:28062klzzwxh:28063klzzwxh:28064klzzwxh:28065klzzwxh:28066 errorklzzwxh:27929 except klzzwxh:27930;klzzwxh:28110klzzwxh:28067klzzwxh:28068klzzwxh:28069klzzwxh:28070klzzwxh:28071klzzwxh:28072klzzwxh:28073klzzwxh:28074klzzwxh:28075klzzwxh:28076klzzwxh:28077 klzzwxh:27931klzzwxh:28111klzzwxh:28078klzzwxh:28079klzzwxh:28080klzzwxh:28081klzzwxh:28082klzzwxh:28083klzzwxh:28084klzzwxh:28085klzzwxh:28086klzzwxh:28087klzzwxh:28088 resHolder = resHolder.klzzwxh:27932nextHolder;klzzwxh:28112klzzwxh:28089klzzwxh:28090klzzwxh:28091klzzwxh:28092klzzwxh:28093klzzwxh:28094klzzwxh:28095 klzzwxh:27933klzzwxh:28113klzzwxh:28096klzzwxh:28097klzzwxh:28098 klzzwxh:27934

klzzwxh:28158klzzwxh:28159klzzwxh:28160 /klzzwxh:28114klzzwxh:28115klzzwxh:28307klzzwxh:28161klzzwxh:28162klzzwxh:28163klzzwxh:28164 klzzwxh:28116 End the work performed by the specified xa resourceklzzwxh:28308klzzwxh:28165klzzwxh:28166klzzwxh:28167klzzwxh:28168 klzzwxh:28117 successfully for a transaction boundary ie commit or rollbackklzzwxh:28309klzzwxh:28169klzzwxh:28170klzzwxh:28171klzzwxh:28172 klzzwxh:28118klzzwxh:28310klzzwxh:28173klzzwxh:28174klzzwxh:28175klzzwxh:28176 klzzwxh:28119 @param xaRes the xa resource holderklzzwxh:28311klzzwxh:28177klzzwxh:28178klzzwxh:28179klzzwxh:28180 klzzwxh:28120 @throws XAException if there is a problem ending the workklzzwxh:28312klzzwxh:28181klzzwxh:28182klzzwxh:28183klzzwxh:28184 klzzwxh:28121 @throws SystemException if the xa resource is notklzzwxh:28313klzzwxh:28185klzzwxh:28186klzzwxh:28187klzzwxh:28188 klzzwxh:28122 in the proper state for its work to be ended.klzzwxh:28314klzzwxh:28189klzzwxh:28190klzzwxh:28191klzzwxh:28192 klzzwxh:28123/klzzwxh:28315klzzwxh:28193klzzwxh:28194klzzwxh:28195 private void endForTransactionBoundaryklzzwxh:28124 InternalXAResourceHolder resHolder klzzwxh:28125klzzwxh:28316klzzwxh:28196klzzwxh:28197klzzwxh:28198klzzwxh:28199klzzwxh:28200klzzwxh:28201klzzwxh:28202 throws SystemException, XAExceptionklzzwxh:28317klzzwxh:28203klzzwxh:28204klzzwxh:28205 klzzwxh:28126klzzwxh:28318klzzwxh:28206klzzwxh:28207klzzwxh:28208klzzwxh:28209klzzwxh:28210klzzwxh:28211klzzwxh:28212 if klzzwxh:28127 klzzwxh:28128 resHolder.klzzwxh:28129endFlag == XAResource.TMNOFLAGS klzzwxh:28130 || klzzwxh:28319klzzwxh:28213klzzwxh:28214klzzwxh:28215klzzwxh:28216klzzwxh:28217klzzwxh:28218klzzwxh:28219klzzwxh:28220klzzwxh:28221klzzwxh:28222klzzwxh:28223klzzwxh:28224 klzzwxh:28131 resHolder.klzzwxh:28132endFlag == XAResource.TMSUSPEND klzzwxh:28133 klzzwxh:28134 klzzwxh:28135klzzwxh:28320klzzwxh:28225klzzwxh:28226klzzwxh:28227klzzwxh:28228klzzwxh:28229klzzwxh:28230klzzwxh:28231klzzwxh:28232klzzwxh:28233klzzwxh:28234klzzwxh:28235 if klzzwxh:28136resHolder.klzzwxh:28137endFlag == XAResource.TMSUSPENDklzzwxh:28138 klzzwxh:28139klzzwxh:28321klzzwxh:28236klzzwxh:28237klzzwxh:28238klzzwxh:28239klzzwxh:28240klzzwxh:28241klzzwxh:28242klzzwxh:28243klzzwxh:28244klzzwxh:28245klzzwxh:28246klzzwxh:28247klzzwxh:28248klzzwxh:28249klzzwxh:28250 resHolder.klzzwxh:28140xaResource.startklzzwxh:28141 resHolder.klzzwxh:28142xid, XAResource.TMRESUME klzzwxh:28143;klzzwxh:28322klzzwxh:28251klzzwxh:28252klzzwxh:28253klzzwxh:28254klzzwxh:28255klzzwxh:28256klzzwxh:28257klzzwxh:28258klzzwxh:28259klzzwxh:28260klzzwxh:28261 klzzwxh:28144klzzwxh:28323klzzwxh:28262klzzwxh:28263klzzwxh:28264klzzwxh:28265klzzwxh:28266klzzwxh:28267klzzwxh:28268klzzwxh:28269klzzwxh:28270klzzwxh:28271klzzwxh:28272 resHolder.klzzwxh:28145xaResource.endklzzwxh:28146 resHolder.klzzwxh:28147xid, XAResource.TMSUCCESS klzzwxh:28148;klzzwxh:28324klzzwxh:28273klzzwxh:28274klzzwxh:28275klzzwxh:28276klzzwxh:28277klzzwxh:28278klzzwxh:28279klzzwxh:28280klzzwxh:28281klzzwxh:28282klzzwxh:28283 resHolder.klzzwxh:28149endFlag = XAResource.TMSUCCESS;klzzwxh:28325klzzwxh:28284klzzwxh:28285klzzwxh:28286klzzwxh:28287klzzwxh:28288klzzwxh:28289klzzwxh:28290 klzzwxh:28150 else if klzzwxh:28151 resHolder.klzzwxh:28152endFlag klzzwxh:28153= XAResource.TMSUCCESS klzzwxh:28154klzzwxh:28326klzzwxh:28291klzzwxh:28292klzzwxh:28293klzzwxh:28294klzzwxh:28295klzzwxh:28296klzzwxh:28297klzzwxh:28298klzzwxh:28299klzzwxh:28300klzzwxh:28301 throw new SystemExceptionklzzwxh:28155 klzzwxh:28302XA resource is not in the proper state to be endedklzzwxh:28303 klzzwxh:28156;klzzwxh:28327klzzwxh:28304klzzwxh:28305klzzwxh:28306 klzzwxh:28157

klzzwxh:28435klzzwxh:28436klzzwxh:28437 /klzzwxh:28328klzzwxh:28329klzzwxh:29066klzzwxh:28438klzzwxh:28439klzzwxh:28440klzzwxh:28441 klzzwxh:28330 Return the oracle error code as a string if the exception is klzzwxh:29067klzzwxh:28442klzzwxh:28443klzzwxh:28444klzzwxh:28445 klzzwxh:28331 klzzwxh:28332@link XAResourceHelperManagerklzzwxh:28333klzzwxh:28334oracleXAExceptionClassNameklzzwxh:28335 klzzwxh:29068klzzwxh:28446klzzwxh:28447klzzwxh:28448klzzwxh:28449 klzzwxh:28336 otherwise return null.klzzwxh:29069klzzwxh:28450klzzwxh:28451klzzwxh:28452klzzwxh:28453 klzzwxh:28337klzzwxh:29070klzzwxh:28454klzzwxh:28455klzzwxh:28456klzzwxh:28457 klzzwxh:28338 @param xaException the XAExceptionklzzwxh:29071klzzwxh:28458klzzwxh:28459klzzwxh:28460klzzwxh:28461 klzzwxh:28339 @return an klzzwxh:29072klzzwxh:28462klzzwxh:28463klzzwxh:28464klzzwxh:28465 klzzwxh:28340/klzzwxh:29073klzzwxh:28466klzzwxh:28467klzzwxh:28468 private String getXAErrorStringklzzwxh:28341 XAException xaException klzzwxh:28342 klzzwxh:28343klzzwxh:29074klzzwxh:28469klzzwxh:28470klzzwxh:28471klzzwxh:28472klzzwxh:28473klzzwxh:28474klzzwxh:28475 return XAResourceHelperManager.getHelperklzzwxh:28344xaExceptionklzzwxh:28345.getXAErrorStringklzzwxh:28346xaExceptionklzzwxh:28347;klzzwxh:29075klzzwxh:28476klzzwxh:28477klzzwxh:28478 klzzwxh:28348klzzwxh:29076klzzwxh:28479klzzwxh:28480klzzwxh:28481 klzzwxh:29077klzzwxh:28482klzzwxh:28483klzzwxh:28484 /klzzwxh:28349klzzwxh:28350klzzwxh:29078klzzwxh:28485klzzwxh:28486klzzwxh:28487klzzwxh:28488 klzzwxh:28351 Modify the current heuristic decision of the transaction accordingklzzwxh:29079klzzwxh:28489klzzwxh:28490klzzwxh:28491klzzwxh:28492 klzzwxh:28352 to data from the specified exception that occurred.klzzwxh:29080klzzwxh:28493klzzwxh:28494klzzwxh:28495klzzwxh:28496 klzzwxh:28353 klzzwxh:28497pklzzwxh:28498klzzwxh:29081klzzwxh:28499klzzwxh:28500klzzwxh:28501klzzwxh:28502 klzzwxh:28354 The heuristic is not normalized.klzzwxh:29082klzzwxh:28503klzzwxh:28504klzzwxh:28505klzzwxh:28506 klzzwxh:28355 klzzwxh:29083klzzwxh:28507klzzwxh:28508klzzwxh:28509klzzwxh:28510 klzzwxh:28356 @param resHolder The XA resource holderklzzwxh:29084klzzwxh:28511klzzwxh:28512klzzwxh:28513klzzwxh:28514 klzzwxh:28357 @param except The XAException that occurredklzzwxh:29085klzzwxh:28515klzzwxh:28516klzzwxh:28517klzzwxh:28518 klzzwxh:28358/klzzwxh:29086klzzwxh:28519klzzwxh:28520klzzwxh:28521 private void xaErrorklzzwxh:28359 InternalXAResourceHolder resHolder, XAException except klzzwxh:28360klzzwxh:29087klzzwxh:28522klzzwxh:28523klzzwxh:28524 klzzwxh:28361klzzwxh:29088klzzwxh:28525klzzwxh:28526klzzwxh:28527klzzwxh:28528klzzwxh:28529klzzwxh:28530klzzwxh:28531 if klzzwxh:28362 except.errorCode == XAException.XAklzzwxh:28363HEURMIX klzzwxh:28364 klzzwxh:28365klzzwxh:29089klzzwxh:28532klzzwxh:28533klzzwxh:28534klzzwxh:28535klzzwxh:28536klzzwxh:28537klzzwxh:28538klzzwxh:28539klzzwxh:28540klzzwxh:28541klzzwxh:28542 klzzwxh:28366heuristic = klzzwxh:28367heuristic | Heuristic.MIXED; klzzwxh:29090klzzwxh:28543klzzwxh:28544klzzwxh:28545klzzwxh:28546klzzwxh:28547klzzwxh:28548klzzwxh:28549klzzwxh:28550klzzwxh:28551klzzwxh:28552klzzwxh:28553 klzzwxh:28368txDomain.klzzwxh:28369category.errorklzzwxh:28370 klzzwxh:28554XAResource klzzwxh:28555 + resHolder.klzzwxh:28371xaResource +klzzwxh:29091klzzwxh:28556klzzwxh:28557klzzwxh:28558klzzwxh:28559klzzwxh:28560klzzwxh:28561klzzwxh:28562klzzwxh:28563klzzwxh:28564klzzwxh:28565klzzwxh:28566klzzwxh:28567klzzwxh:28568klzzwxh:28569klzzwxh:28570klzzwxh:28571klzzwxh:28572klzzwxh:28573klzzwxh:28574klzzwxh:28575klzzwxh:28576klzzwxh:28577klzzwxh:28578klzzwxh:28579klzzwxh:28580klzzwxh:28581klzzwxh:28582klzzwxh:28583klzzwxh:28584klzzwxh:28585klzzwxh:28586klzzwxh:28587klzzwxh:28588klzzwxh:28589klzzwxh:28590klzzwxh:28591klzzwxh:28592klzzwxh:28593 klzzwxh:28594 reported mixed heuristic on transaction branch klzzwxh:28595 + resHolder.klzzwxh:28372xid +klzzwxh:29092klzzwxh:28596klzzwxh:28597klzzwxh:28598klzzwxh:28599klzzwxh:28600klzzwxh:28601klzzwxh:28602klzzwxh:28603klzzwxh:28604klzzwxh:28605klzzwxh:28606klzzwxh:28607klzzwxh:28608klzzwxh:28609klzzwxh:28610klzzwxh:28611klzzwxh:28612klzzwxh:28613klzzwxh:28614klzzwxh:28615klzzwxh:28616klzzwxh:28617klzzwxh:28618klzzwxh:28619klzzwxh:28620klzzwxh:28621klzzwxh:28622klzzwxh:28623klzzwxh:28624klzzwxh:28625klzzwxh:28626klzzwxh:28627klzzwxh:28628klzzwxh:28629klzzwxh:28630klzzwxh:28631klzzwxh:28632klzzwxh:28633 getXAErrorStringklzzwxh:28373 except klzzwxh:28374 , except klzzwxh:28375;klzzwxh:29093klzzwxh:28634klzzwxh:28635klzzwxh:28636klzzwxh:28637klzzwxh:28638klzzwxh:28639klzzwxh:28640 klzzwxh:28376 else if klzzwxh:28377 except.errorCode == XAException.XAklzzwxh:28378HEURHAZ klzzwxh:28379 klzzwxh:28380klzzwxh:29094klzzwxh:28641klzzwxh:28642klzzwxh:28643klzzwxh:28644klzzwxh:28645klzzwxh:28646klzzwxh:28647klzzwxh:28648klzzwxh:28649klzzwxh:28650klzzwxh:28651 klzzwxh:28381heuristic = klzzwxh:28382heuristic | Heuristic.HAZARD; klzzwxh:29095klzzwxh:28652klzzwxh:28653klzzwxh:28654klzzwxh:28655klzzwxh:28656klzzwxh:28657klzzwxh:28658klzzwxh:28659klzzwxh:28660klzzwxh:28661klzzwxh:28662 klzzwxh:28383txDomain.klzzwxh:28384category.errorklzzwxh:28385 klzzwxh:28663XAResource klzzwxh:28664 + resHolder.klzzwxh:28386xaResource +klzzwxh:29096klzzwxh:28665klzzwxh:28666klzzwxh:28667klzzwxh:28668klzzwxh:28669klzzwxh:28670klzzwxh:28671klzzwxh:28672klzzwxh:28673klzzwxh:28674klzzwxh:28675klzzwxh:28676klzzwxh:28677klzzwxh:28678klzzwxh:28679klzzwxh:28680klzzwxh:28681klzzwxh:28682klzzwxh:28683klzzwxh:28684klzzwxh:28685klzzwxh:28686klzzwxh:28687klzzwxh:28688klzzwxh:28689klzzwxh:28690klzzwxh:28691klzzwxh:28692klzzwxh:28693klzzwxh:28694klzzwxh:28695klzzwxh:28696klzzwxh:28697klzzwxh:28698klzzwxh:28699klzzwxh:28700klzzwxh:28701klzzwxh:28702 klzzwxh:28703 reported hazard heuristic on transaction branch klzzwxh:28704 + resHolder.klzzwxh:28387xid +klzzwxh:29097klzzwxh:28705klzzwxh:28706klzzwxh:28707klzzwxh:28708klzzwxh:28709klzzwxh:28710klzzwxh:28711klzzwxh:28712klzzwxh:28713klzzwxh:28714klzzwxh:28715klzzwxh:28716klzzwxh:28717klzzwxh:28718klzzwxh:28719klzzwxh:28720klzzwxh:28721klzzwxh:28722klzzwxh:28723klzzwxh:28724klzzwxh:28725klzzwxh:28726klzzwxh:28727klzzwxh:28728klzzwxh:28729klzzwxh:28730klzzwxh:28731klzzwxh:28732klzzwxh:28733klzzwxh:28734klzzwxh:28735klzzwxh:28736klzzwxh:28737klzzwxh:28738klzzwxh:28739klzzwxh:28740klzzwxh:28741klzzwxh:28742 getXAErrorStringklzzwxh:28388 except klzzwxh:28389, except klzzwxh:28390;klzzwxh:29098klzzwxh:28743klzzwxh:28744klzzwxh:28745klzzwxh:28746klzzwxh:28747klzzwxh:28748klzzwxh:28749 klzzwxh:28391 else if klzzwxh:28392 except.errorCode == XAException.XAklzzwxh:28393RDONLYklzzwxh:28394 klzzwxh:28395klzzwxh:29099klzzwxh:28750klzzwxh:28751klzzwxh:28752klzzwxh:28753klzzwxh:28754klzzwxh:28755klzzwxh:28756klzzwxh:28757klzzwxh:28758klzzwxh:28759klzzwxh:28760 ; // ignoreklzzwxh:28761klzzwxh:28762klzzwxh:28763 klzzwxh:29100klzzwxh:28764klzzwxh:28765klzzwxh:28766klzzwxh:28767klzzwxh:28768klzzwxh:28769klzzwxh:28770 klzzwxh:28396 else if klzzwxh:28397 except.errorCode klzzwxh:28771= XAException.XAklzzwxh:28398RBBASE klzzwxh:28772klzzwxh:28773klzzwxh:29101klzzwxh:28774klzzwxh:28775klzzwxh:28776klzzwxh:28777klzzwxh:28778klzzwxh:28779klzzwxh:28780klzzwxh:28781klzzwxh:28782klzzwxh:28783klzzwxh:28784klzzwxh:28785klzzwxh:28786klzzwxh:28787klzzwxh:28788klzzwxh:28789klzzwxh:28790klzzwxh:28791klzzwxh:28792 except.errorCode klzzwxh:28793= XAException.XAklzzwxh:28399RBEND klzzwxh:28400 klzzwxh:28401klzzwxh:29102klzzwxh:28794klzzwxh:28795klzzwxh:28796klzzwxh:28797klzzwxh:28798klzzwxh:28799klzzwxh:28800klzzwxh:28801klzzwxh:28802klzzwxh:28803klzzwxh:28804 klzzwxh:28402txDomain.klzzwxh:28403category.errorklzzwxh:28404 klzzwxh:28805XAResource klzzwxh:28806 + resHolder.klzzwxh:28405xaResource +klzzwxh:29103klzzwxh:28807klzzwxh:28808klzzwxh:28809klzzwxh:28810klzzwxh:28811klzzwxh:28812klzzwxh:28813klzzwxh:28814klzzwxh:28815klzzwxh:28816klzzwxh:28817klzzwxh:28818klzzwxh:28819klzzwxh:28820klzzwxh:28821klzzwxh:28822klzzwxh:28823klzzwxh:28824klzzwxh:28825klzzwxh:28826klzzwxh:28827klzzwxh:28828klzzwxh:28829klzzwxh:28830klzzwxh:28831klzzwxh:28832klzzwxh:28833klzzwxh:28834klzzwxh:28835klzzwxh:28836klzzwxh:28837klzzwxh:28838klzzwxh:28839klzzwxh:28840klzzwxh:28841klzzwxh:28842klzzwxh:28843klzzwxh:28844 klzzwxh:28845 reported rollback heuristic on transaction branch klzzwxh:28846 + resHolder.klzzwxh:28406xid +klzzwxh:29104klzzwxh:28847klzzwxh:28848klzzwxh:28849klzzwxh:28850klzzwxh:28851klzzwxh:28852klzzwxh:28853klzzwxh:28854klzzwxh:28855klzzwxh:28856klzzwxh:28857klzzwxh:28858klzzwxh:28859klzzwxh:28860klzzwxh:28861klzzwxh:28862klzzwxh:28863klzzwxh:28864klzzwxh:28865klzzwxh:28866klzzwxh:28867klzzwxh:28868klzzwxh:28869klzzwxh:28870klzzwxh:28871klzzwxh:28872klzzwxh:28873klzzwxh:28874klzzwxh:28875klzzwxh:28876klzzwxh:28877klzzwxh:28878klzzwxh:28879klzzwxh:28880klzzwxh:28881klzzwxh:28882klzzwxh:28883klzzwxh:28884 getXAErrorStringklzzwxh:28407 except klzzwxh:28408, except klzzwxh:28409;klzzwxh:29105klzzwxh:28885klzzwxh:28886klzzwxh:28887klzzwxh:28888klzzwxh:28889klzzwxh:28890klzzwxh:28891klzzwxh:28892klzzwxh:28893klzzwxh:28894klzzwxh:28895 klzzwxh:28410heuristic = klzzwxh:28411heuristic | Heuristic.ROLLBACK;klzzwxh:29106klzzwxh:28896klzzwxh:28897klzzwxh:28898klzzwxh:28899klzzwxh:28900klzzwxh:28901klzzwxh:28902 klzzwxh:28412 else if klzzwxh:28413 except.errorCode == XAException.XAklzzwxh:28414HEURCOM klzzwxh:28415 klzzwxh:28416klzzwxh:29107klzzwxh:28903klzzwxh:28904klzzwxh:28905klzzwxh:28906klzzwxh:28907klzzwxh:28908klzzwxh:28909klzzwxh:28910klzzwxh:28911klzzwxh:28912klzzwxh:28913 klzzwxh:28417heuristic = klzzwxh:28418heuristic | Heuristic.COMMIT;klzzwxh:29108klzzwxh:28914klzzwxh:28915klzzwxh:28916klzzwxh:28917klzzwxh:28918klzzwxh:28919klzzwxh:28920klzzwxh:28921klzzwxh:28922klzzwxh:28923klzzwxh:28924 klzzwxh:28419txDomain.klzzwxh:28420category.errorklzzwxh:28421 klzzwxh:28925XAResource klzzwxh:28926 + resHolder.klzzwxh:28422xaResource +klzzwxh:29109klzzwxh:28927klzzwxh:28928klzzwxh:28929klzzwxh:28930klzzwxh:28931klzzwxh:28932klzzwxh:28933klzzwxh:28934klzzwxh:28935klzzwxh:28936klzzwxh:28937klzzwxh:28938klzzwxh:28939klzzwxh:28940klzzwxh:28941klzzwxh:28942klzzwxh:28943klzzwxh:28944klzzwxh:28945klzzwxh:28946klzzwxh:28947klzzwxh:28948klzzwxh:28949klzzwxh:28950klzzwxh:28951klzzwxh:28952klzzwxh:28953klzzwxh:28954klzzwxh:28955klzzwxh:28956klzzwxh:28957klzzwxh:28958klzzwxh:28959klzzwxh:28960klzzwxh:28961klzzwxh:28962klzzwxh:28963klzzwxh:28964 klzzwxh:28965 reported commit heuristic on transaction branch klzzwxh:28966 + resHolder.klzzwxh:28423xid +klzzwxh:29110klzzwxh:28967klzzwxh:28968klzzwxh:28969klzzwxh:28970klzzwxh:28971klzzwxh:28972klzzwxh:28973klzzwxh:28974klzzwxh:28975klzzwxh:28976klzzwxh:28977klzzwxh:28978klzzwxh:28979klzzwxh:28980klzzwxh:28981klzzwxh:28982klzzwxh:28983klzzwxh:28984klzzwxh:28985klzzwxh:28986klzzwxh:28987klzzwxh:28988klzzwxh:28989klzzwxh:28990klzzwxh:28991klzzwxh:28992klzzwxh:28993klzzwxh:28994klzzwxh:28995klzzwxh:28996klzzwxh:28997klzzwxh:28998klzzwxh:28999klzzwxh:29000klzzwxh:29001klzzwxh:29002klzzwxh:29003klzzwxh:29004 getXAErrorStringklzzwxh:28424 except klzzwxh:28425, except klzzwxh:28426;klzzwxh:29111klzzwxh:29005klzzwxh:29006klzzwxh:29007klzzwxh:29008klzzwxh:29009klzzwxh:29010klzzwxh:29011 klzzwxh:28427 else klzzwxh:28428klzzwxh:29112klzzwxh:29012klzzwxh:29013klzzwxh:29014klzzwxh:29015klzzwxh:29016klzzwxh:29017klzzwxh:29018klzzwxh:29019klzzwxh:29020klzzwxh:29021klzzwxh:29022 // Any error will cause us to rollback the entireklzzwxh:29113klzzwxh:29023klzzwxh:29024klzzwxh:29025klzzwxh:29026klzzwxh:29027klzzwxh:29028klzzwxh:29029klzzwxh:29030klzzwxh:29031klzzwxh:29032klzzwxh:29033 // transaction or at least the remaining part of it.klzzwxh:29114klzzwxh:29034klzzwxh:29035klzzwxh:29036klzzwxh:29037klzzwxh:29038klzzwxh:29039klzzwxh:29040klzzwxh:29041klzzwxh:29042klzzwxh:29043klzzwxh:29044 klzzwxh:28429heuristic = klzzwxh:28430heuristic | Heuristic.OTHER;klzzwxh:29115klzzwxh:29045klzzwxh:29046klzzwxh:29047klzzwxh:29048klzzwxh:29049klzzwxh:29050klzzwxh:29051klzzwxh:29052klzzwxh:29053klzzwxh:29054klzzwxh:29055 errorklzzwxh:28431 except klzzwxh:28432;klzzwxh:29116klzzwxh:29056klzzwxh:29057klzzwxh:29058klzzwxh:29059klzzwxh:29060klzzwxh:29061klzzwxh:29062 klzzwxh:28433klzzwxh:29117klzzwxh:29063klzzwxh:29064klzzwxh:29065 klzzwxh:28434

klzzwxh:29148klzzwxh:29149klzzwxh:29150 /klzzwxh:29118klzzwxh:29119klzzwxh:29342klzzwxh:29151klzzwxh:29152klzzwxh:29153klzzwxh:29154 klzzwxh:29120 Called to commit the specified XA resources.klzzwxh:29343klzzwxh:29155klzzwxh:29156klzzwxh:29157klzzwxh:29158 klzzwxh:29121klzzwxh:29344klzzwxh:29159klzzwxh:29160klzzwxh:29161klzzwxh:29162 klzzwxh:29122 @param resHolder A list of XA resource holdersklzzwxh:29345klzzwxh:29163klzzwxh:29164klzzwxh:29165klzzwxh:29166 klzzwxh:29123 @param onePhaseCommit True if the XA resources are klzzwxh:29346klzzwxh:29167klzzwxh:29168klzzwxh:29169klzzwxh:29170 klzzwxh:29124 to be committed using one phase commitklzzwxh:29347klzzwxh:29171klzzwxh:29172klzzwxh:29173klzzwxh:29174 klzzwxh:29125/klzzwxh:29348klzzwxh:29175klzzwxh:29176klzzwxh:29177 private void commitXAResourcesklzzwxh:29126 InternalXAResourceHolder resHolder, boolean onePhaseCommit klzzwxh:29127klzzwxh:29349klzzwxh:29178klzzwxh:29179klzzwxh:29180 klzzwxh:29128klzzwxh:29350klzzwxh:29181klzzwxh:29182klzzwxh:29183klzzwxh:29184klzzwxh:29185klzzwxh:29186klzzwxh:29187 while klzzwxh:29129 resHolder klzzwxh:29130= null klzzwxh:29131 klzzwxh:29132klzzwxh:29351klzzwxh:29188klzzwxh:29189klzzwxh:29190klzzwxh:29191klzzwxh:29192klzzwxh:29193klzzwxh:29194klzzwxh:29195klzzwxh:29196klzzwxh:29197klzzwxh:29198 try klzzwxh:29133klzzwxh:29199klzzwxh:29200klzzwxh:29201klzzwxh:29202klzzwxh:29203 klzzwxh:29352klzzwxh:29204klzzwxh:29205klzzwxh:29206klzzwxh:29207klzzwxh:29208klzzwxh:29209klzzwxh:29210klzzwxh:29211klzzwxh:29212klzzwxh:29213klzzwxh:29214klzzwxh:29215klzzwxh:29216klzzwxh:29217klzzwxh:29218 // Shared resources and read-only resourcesklzzwxh:29353klzzwxh:29219klzzwxh:29220klzzwxh:29221klzzwxh:29222klzzwxh:29223klzzwxh:29224klzzwxh:29225klzzwxh:29226klzzwxh:29227klzzwxh:29228klzzwxh:29229klzzwxh:29230klzzwxh:29231klzzwxh:29232klzzwxh:29233 // are not commited.klzzwxh:29354klzzwxh:29234klzzwxh:29235klzzwxh:29236klzzwxh:29237klzzwxh:29238klzzwxh:29239klzzwxh:29240klzzwxh:29241klzzwxh:29242klzzwxh:29243klzzwxh:29244klzzwxh:29245klzzwxh:29246klzzwxh:29247klzzwxh:29248 if klzzwxh:29134 klzzwxh:29135 resHolder.klzzwxh:29136shared klzzwxh:29249klzzwxh:29250 klzzwxh:29137 resHolder.klzzwxh:29138readOnly klzzwxh:29139 klzzwxh:29140klzzwxh:29355klzzwxh:29251klzzwxh:29252klzzwxh:29253klzzwxh:29254klzzwxh:29255klzzwxh:29256klzzwxh:29257klzzwxh:29258klzzwxh:29259klzzwxh:29260klzzwxh:29261klzzwxh:29262klzzwxh:29263klzzwxh:29264klzzwxh:29265klzzwxh:29266klzzwxh:29267klzzwxh:29268klzzwxh:29269 resHolder.klzzwxh:29141xaResource.commitklzzwxh:29142 resHolder.klzzwxh:29143xid, onePhaseCommit klzzwxh:29144;klzzwxh:29356klzzwxh:29270klzzwxh:29271klzzwxh:29272klzzwxh:29273klzzwxh:29274klzzwxh:29275klzzwxh:29276klzzwxh:29277klzzwxh:29278klzzwxh:29279klzzwxh:29280klzzwxh:29281klzzwxh:29282klzzwxh:29283klzzwxh:29284klzzwxh:29285klzzwxh:29286klzzwxh:29287klzzwxh:29288 // At least one resource commited, we are eitherklzzwxh:29357klzzwxh:29289klzzwxh:29290klzzwxh:29291klzzwxh:29292klzzwxh:29293klzzwxh:29294klzzwxh:29295klzzwxh:29296klzzwxh:29297klzzwxh:29298klzzwxh:29299klzzwxh:29300klzzwxh:29301klzzwxh:29302klzzwxh:29303klzzwxh:29304klzzwxh:29305klzzwxh:29306klzzwxh:29307 // commit or mixed.klzzwxh:29358klzzwxh:29308klzzwxh:29309klzzwxh:29310klzzwxh:29311klzzwxh:29312klzzwxh:29313klzzwxh:29314klzzwxh:29315klzzwxh:29316klzzwxh:29317klzzwxh:29318klzzwxh:29319klzzwxh:29320klzzwxh:29321klzzwxh:29322klzzwxh:29323klzzwxh:29324klzzwxh:29325klzzwxh:29326 klzzwxh:29145heuristic = klzzwxh:29146heuristic | Heuristic.COMMIT;klzzwxh:29359klzzwxh:29327klzzwxh:29328klzzwxh:29329klzzwxh:29330klzzwxh:29331klzzwxh:29332klzzwxh:29333klzzwxh:29334klzzwxh:29335klzzwxh:29336klzzwxh:29337klzzwxh:29338klzzwxh:29339klzzwxh:29340klzzwxh:29341 klzzwxh:29147

klzzwxh:29370klzzwxh:29371klzzwxh:29372klzzwxh:29373klzzwxh:29374klzzwxh:29375klzzwxh:29376klzzwxh:29377klzzwxh:29378klzzwxh:29379klzzwxh:29380klzzwxh:29381klzzwxh:29382klzzwxh:29383klzzwxh:29384 if klzzwxh:29360 null klzzwxh:29361= resHolder.klzzwxh:29362callback klzzwxh:29363 klzzwxh:29364klzzwxh:29422klzzwxh:29385klzzwxh:29386klzzwxh:29387klzzwxh:29388klzzwxh:29389klzzwxh:29390klzzwxh:29391klzzwxh:29392klzzwxh:29393klzzwxh:29394klzzwxh:29395klzzwxh:29396klzzwxh:29397klzzwxh:29398klzzwxh:29399klzzwxh:29400klzzwxh:29401klzzwxh:29402klzzwxh:29403 resHolder.klzzwxh:29365callback.boundaryklzzwxh:29366 resHolder.klzzwxh:29367xid, true klzzwxh:29368;klzzwxh:29404klzzwxh:29405klzzwxh:29406 klzzwxh:29423klzzwxh:29407klzzwxh:29408klzzwxh:29409klzzwxh:29410klzzwxh:29411klzzwxh:29412klzzwxh:29413klzzwxh:29414klzzwxh:29415klzzwxh:29416klzzwxh:29417klzzwxh:29418klzzwxh:29419klzzwxh:29420klzzwxh:29421 klzzwxh:29369

klzzwxh:29442klzzwxh:29443klzzwxh:29444klzzwxh:29445klzzwxh:29446klzzwxh:29447klzzwxh:29448klzzwxh:29449klzzwxh:29450klzzwxh:29451klzzwxh:29452 klzzwxh:29424 catch klzzwxh:29425 XAException except klzzwxh:29426 klzzwxh:29427klzzwxh:29571klzzwxh:29453klzzwxh:29454klzzwxh:29455klzzwxh:29456klzzwxh:29457klzzwxh:29458klzzwxh:29459klzzwxh:29460klzzwxh:29461klzzwxh:29462klzzwxh:29463klzzwxh:29464klzzwxh:29465klzzwxh:29466klzzwxh:29467 xaErrorklzzwxh:29428 resHolder, except klzzwxh:29429;klzzwxh:29572klzzwxh:29468klzzwxh:29469klzzwxh:29470klzzwxh:29471klzzwxh:29472klzzwxh:29473klzzwxh:29474klzzwxh:29475klzzwxh:29476klzzwxh:29477klzzwxh:29478 klzzwxh:29430 catch klzzwxh:29431 Exception except klzzwxh:29432 klzzwxh:29433klzzwxh:29573klzzwxh:29479klzzwxh:29480klzzwxh:29481klzzwxh:29482klzzwxh:29483klzzwxh:29484klzzwxh:29485klzzwxh:29486klzzwxh:29487klzzwxh:29488klzzwxh:29489klzzwxh:29490klzzwxh:29491klzzwxh:29492klzzwxh:29493 // Any error will cause us to rollback the entireklzzwxh:29574klzzwxh:29494klzzwxh:29495klzzwxh:29496klzzwxh:29497klzzwxh:29498klzzwxh:29499klzzwxh:29500klzzwxh:29501klzzwxh:29502klzzwxh:29503klzzwxh:29504klzzwxh:29505klzzwxh:29506klzzwxh:29507klzzwxh:29508 // transaction or at least the remaining part of it.klzzwxh:29575klzzwxh:29509klzzwxh:29510klzzwxh:29511klzzwxh:29512klzzwxh:29513klzzwxh:29514klzzwxh:29515klzzwxh:29516klzzwxh:29517klzzwxh:29518klzzwxh:29519klzzwxh:29520klzzwxh:29521klzzwxh:29522klzzwxh:29523 klzzwxh:29434heuristic = klzzwxh:29435heuristic | Heuristic.HAZARD;klzzwxh:29576klzzwxh:29524klzzwxh:29525klzzwxh:29526klzzwxh:29527klzzwxh:29528klzzwxh:29529klzzwxh:29530klzzwxh:29531klzzwxh:29532klzzwxh:29533klzzwxh:29534klzzwxh:29535klzzwxh:29536klzzwxh:29537klzzwxh:29538 errorklzzwxh:29436 except klzzwxh:29437;klzzwxh:29577klzzwxh:29539klzzwxh:29540klzzwxh:29541klzzwxh:29542klzzwxh:29543klzzwxh:29544klzzwxh:29545klzzwxh:29546klzzwxh:29547klzzwxh:29548klzzwxh:29549 klzzwxh:29438klzzwxh:29578klzzwxh:29550klzzwxh:29551klzzwxh:29552klzzwxh:29553klzzwxh:29554klzzwxh:29555klzzwxh:29556klzzwxh:29557klzzwxh:29558klzzwxh:29559klzzwxh:29560 resHolder = resHolder.klzzwxh:29439nextHolder;klzzwxh:29579klzzwxh:29561klzzwxh:29562klzzwxh:29563klzzwxh:29564klzzwxh:29565klzzwxh:29566klzzwxh:29567 klzzwxh:29440klzzwxh:29580klzzwxh:29568klzzwxh:29569klzzwxh:29570 klzzwxh:29441

klzzwxh:29609klzzwxh:29610klzzwxh:29611 /klzzwxh:29581klzzwxh:29582klzzwxh:29781klzzwxh:29612klzzwxh:29613klzzwxh:29614klzzwxh:29615 klzzwxh:29583 Called to rollback the specified XA resources.klzzwxh:29782klzzwxh:29616klzzwxh:29617klzzwxh:29618klzzwxh:29619 klzzwxh:29584klzzwxh:29783klzzwxh:29620klzzwxh:29621klzzwxh:29622klzzwxh:29623 klzzwxh:29585 @param resHolder A list of XA resource holdersklzzwxh:29784klzzwxh:29624klzzwxh:29625klzzwxh:29626klzzwxh:29627 klzzwxh:29586/klzzwxh:29785klzzwxh:29628klzzwxh:29629klzzwxh:29630 private void rollbackXAResourcesklzzwxh:29587 InternalXAResourceHolder resHolder klzzwxh:29588klzzwxh:29786klzzwxh:29631klzzwxh:29632klzzwxh:29633 klzzwxh:29589klzzwxh:29787klzzwxh:29634klzzwxh:29635klzzwxh:29636klzzwxh:29637klzzwxh:29638klzzwxh:29639klzzwxh:29640 // Rollback each of the resources, regardless ofklzzwxh:29788klzzwxh:29641klzzwxh:29642klzzwxh:29643klzzwxh:29644klzzwxh:29645klzzwxh:29646klzzwxh:29647 // error conditions. Shared resources do not requireklzzwxh:29789klzzwxh:29648klzzwxh:29649klzzwxh:29650klzzwxh:29651klzzwxh:29652klzzwxh:29653klzzwxh:29654 // rollback.klzzwxh:29790klzzwxh:29655klzzwxh:29656klzzwxh:29657klzzwxh:29658klzzwxh:29659klzzwxh:29660klzzwxh:29661 while klzzwxh:29590 resHolder klzzwxh:29591= null klzzwxh:29592 klzzwxh:29593klzzwxh:29791klzzwxh:29662klzzwxh:29663klzzwxh:29664klzzwxh:29665klzzwxh:29666klzzwxh:29667klzzwxh:29668klzzwxh:29669klzzwxh:29670klzzwxh:29671klzzwxh:29672 try klzzwxh:29594klzzwxh:29792klzzwxh:29673klzzwxh:29674klzzwxh:29675klzzwxh:29676klzzwxh:29677klzzwxh:29678klzzwxh:29679klzzwxh:29680klzzwxh:29681klzzwxh:29682klzzwxh:29683klzzwxh:29684klzzwxh:29685klzzwxh:29686klzzwxh:29687 if klzzwxh:29595 klzzwxh:29596 resHolder.klzzwxh:29597shared klzzwxh:29688klzzwxh:29689 klzzwxh:29598 resHolder.klzzwxh:29599readOnly klzzwxh:29600 klzzwxh:29601klzzwxh:29793klzzwxh:29690klzzwxh:29691klzzwxh:29692klzzwxh:29693klzzwxh:29694klzzwxh:29695klzzwxh:29696klzzwxh:29697klzzwxh:29698klzzwxh:29699klzzwxh:29700klzzwxh:29701klzzwxh:29702klzzwxh:29703klzzwxh:29704klzzwxh:29705klzzwxh:29706klzzwxh:29707klzzwxh:29708 resHolder.klzzwxh:29602xaResource.rollbackklzzwxh:29603 resHolder.klzzwxh:29604xid klzzwxh:29605;klzzwxh:29794klzzwxh:29709klzzwxh:29710klzzwxh:29711klzzwxh:29712klzzwxh:29713klzzwxh:29714klzzwxh:29715klzzwxh:29716klzzwxh:29717klzzwxh:29718klzzwxh:29719klzzwxh:29720klzzwxh:29721klzzwxh:29722klzzwxh:29723klzzwxh:29724klzzwxh:29725klzzwxh:29726klzzwxh:29727 // Initially we're readonly so we switch to rollback.klzzwxh:29795klzzwxh:29728klzzwxh:29729klzzwxh:29730klzzwxh:29731klzzwxh:29732klzzwxh:29733klzzwxh:29734klzzwxh:29735klzzwxh:29736klzzwxh:29737klzzwxh:29738klzzwxh:29739klzzwxh:29740klzzwxh:29741klzzwxh:29742klzzwxh:29743klzzwxh:29744klzzwxh:29745klzzwxh:29746 // If we happen to be in commit, we switch to mixed.klzzwxh:29796klzzwxh:29747klzzwxh:29748klzzwxh:29749klzzwxh:29750klzzwxh:29751klzzwxh:29752klzzwxh:29753klzzwxh:29754klzzwxh:29755klzzwxh:29756klzzwxh:29757klzzwxh:29758klzzwxh:29759klzzwxh:29760klzzwxh:29761klzzwxh:29762klzzwxh:29763klzzwxh:29764klzzwxh:29765 klzzwxh:29606heuristic = klzzwxh:29607heuristic | Heuristic.ROLLBACK;klzzwxh:29797klzzwxh:29766klzzwxh:29767klzzwxh:29768klzzwxh:29769klzzwxh:29770klzzwxh:29771klzzwxh:29772klzzwxh:29773klzzwxh:29774klzzwxh:29775klzzwxh:29776klzzwxh:29777klzzwxh:29778klzzwxh:29779klzzwxh:29780 klzzwxh:29608

klzzwxh:29808klzzwxh:29809klzzwxh:29810klzzwxh:29811klzzwxh:29812klzzwxh:29813klzzwxh:29814klzzwxh:29815klzzwxh:29816klzzwxh:29817klzzwxh:29818klzzwxh:29819klzzwxh:29820klzzwxh:29821klzzwxh:29822 if klzzwxh:29798 null klzzwxh:29799= resHolder.klzzwxh:29800callback klzzwxh:29801 klzzwxh:29802klzzwxh:29860klzzwxh:29823klzzwxh:29824klzzwxh:29825klzzwxh:29826klzzwxh:29827klzzwxh:29828klzzwxh:29829klzzwxh:29830klzzwxh:29831klzzwxh:29832klzzwxh:29833klzzwxh:29834klzzwxh:29835klzzwxh:29836klzzwxh:29837klzzwxh:29838klzzwxh:29839klzzwxh:29840klzzwxh:29841 resHolder.klzzwxh:29803callback.boundaryklzzwxh:29804 resHolder.klzzwxh:29805xid, false klzzwxh:29806;klzzwxh:29842klzzwxh:29843klzzwxh:29844 klzzwxh:29861klzzwxh:29845klzzwxh:29846klzzwxh:29847klzzwxh:29848klzzwxh:29849klzzwxh:29850klzzwxh:29851klzzwxh:29852klzzwxh:29853klzzwxh:29854klzzwxh:29855klzzwxh:29856klzzwxh:29857klzzwxh:29858klzzwxh:29859 klzzwxh:29807

klzzwxh:29880klzzwxh:29881klzzwxh:29882klzzwxh:29883klzzwxh:29884klzzwxh:29885klzzwxh:29886klzzwxh:29887klzzwxh:29888klzzwxh:29889klzzwxh:29890 klzzwxh:29862 catch klzzwxh:29863 XAException except klzzwxh:29864 klzzwxh:29865klzzwxh:29979klzzwxh:29891klzzwxh:29892klzzwxh:29893klzzwxh:29894klzzwxh:29895klzzwxh:29896klzzwxh:29897klzzwxh:29898klzzwxh:29899klzzwxh:29900klzzwxh:29901klzzwxh:29902klzzwxh:29903klzzwxh:29904klzzwxh:29905 xaErrorklzzwxh:29866 resHolder, except klzzwxh:29867;klzzwxh:29980klzzwxh:29906klzzwxh:29907klzzwxh:29908klzzwxh:29909klzzwxh:29910klzzwxh:29911klzzwxh:29912klzzwxh:29913klzzwxh:29914klzzwxh:29915klzzwxh:29916 klzzwxh:29868 catch klzzwxh:29869 Exception except klzzwxh:29870 klzzwxh:29871klzzwxh:29981klzzwxh:29917klzzwxh:29918klzzwxh:29919klzzwxh:29920klzzwxh:29921klzzwxh:29922klzzwxh:29923klzzwxh:29924klzzwxh:29925klzzwxh:29926klzzwxh:29927klzzwxh:29928klzzwxh:29929klzzwxh:29930klzzwxh:29931 klzzwxh:29872heuristic = klzzwxh:29873heuristic | Heuristic.HAZARD;klzzwxh:29982klzzwxh:29932klzzwxh:29933klzzwxh:29934klzzwxh:29935klzzwxh:29936klzzwxh:29937klzzwxh:29938klzzwxh:29939klzzwxh:29940klzzwxh:29941klzzwxh:29942klzzwxh:29943klzzwxh:29944klzzwxh:29945klzzwxh:29946 errorklzzwxh:29874 except klzzwxh:29875;klzzwxh:29983klzzwxh:29947klzzwxh:29948klzzwxh:29949klzzwxh:29950klzzwxh:29951klzzwxh:29952klzzwxh:29953klzzwxh:29954klzzwxh:29955klzzwxh:29956klzzwxh:29957 klzzwxh:29876klzzwxh:29984klzzwxh:29958klzzwxh:29959klzzwxh:29960klzzwxh:29961klzzwxh:29962klzzwxh:29963klzzwxh:29964klzzwxh:29965klzzwxh:29966klzzwxh:29967klzzwxh:29968 resHolder = resHolder.klzzwxh:29877nextHolder;klzzwxh:29985klzzwxh:29969klzzwxh:29970klzzwxh:29971klzzwxh:29972klzzwxh:29973klzzwxh:29974klzzwxh:29975 klzzwxh:29878klzzwxh:29986klzzwxh:29976klzzwxh:29977klzzwxh:29978 klzzwxh:29879

klzzwxh:30007klzzwxh:30008klzzwxh:30009 /klzzwxh:29987klzzwxh:29988klzzwxh:30133klzzwxh:30010klzzwxh:30011klzzwxh:30012klzzwxh:30013 klzzwxh:29989 Return true if the specified xa resource is sharedklzzwxh:30134klzzwxh:30014klzzwxh:30015klzzwxh:30016klzzwxh:30017 klzzwxh:29990 with the resources in the specified array. If the xaklzzwxh:30135klzzwxh:30018klzzwxh:30019klzzwxh:30020klzzwxh:30021 klzzwxh:29991 resource is to be shared it is added to the list ofklzzwxh:30136klzzwxh:30022klzzwxh:30023klzzwxh:30024klzzwxh:30025 klzzwxh:29992 enlisted resources.klzzwxh:30137klzzwxh:30026klzzwxh:30027klzzwxh:30028klzzwxh:30029 klzzwxh:29993klzzwxh:30138klzzwxh:30030klzzwxh:30031klzzwxh:30032klzzwxh:30033 klzzwxh:29994 @param xaResource the xa resourceklzzwxh:30139klzzwxh:30034klzzwxh:30035klzzwxh:30036klzzwxh:30037 klzzwxh:29995 @param resHolder A list of XA resource holders.klzzwxh:30140klzzwxh:30038klzzwxh:30039klzzwxh:30040klzzwxh:30041 klzzwxh:29996 Can be null.klzzwxh:30141klzzwxh:30042klzzwxh:30043klzzwxh:30044klzzwxh:30045 klzzwxh:29997 @return true if the specified xa resource is sharedklzzwxh:30142klzzwxh:30046klzzwxh:30047klzzwxh:30048klzzwxh:30049 klzzwxh:29998 with the resources in the specified arrayklzzwxh:30143klzzwxh:30050klzzwxh:30051klzzwxh:30052klzzwxh:30053 klzzwxh:29999 @throws XAException if there is a problem letting the xaklzzwxh:30144klzzwxh:30054klzzwxh:30055klzzwxh:30056klzzwxh:30057 klzzwxh:30000 resource join an existing transaction branchklzzwxh:30145klzzwxh:30058klzzwxh:30059klzzwxh:30060klzzwxh:30061 klzzwxh:30001 @throws SystemException if there is a general problemklzzwxh:30146klzzwxh:30062klzzwxh:30063klzzwxh:30064klzzwxh:30065 klzzwxh:30002 sharing the resource.klzzwxh:30147klzzwxh:30066klzzwxh:30067klzzwxh:30068klzzwxh:30069 klzzwxh:30003/klzzwxh:30148klzzwxh:30070klzzwxh:30071klzzwxh:30072 private boolean shareResourceklzzwxh:30004 XAResource xaResource, XAResourceCallback callback, InternalXAResourceHolder resHolder klzzwxh:30005klzzwxh:30149klzzwxh:30073klzzwxh:30074klzzwxh:30075klzzwxh:30076klzzwxh:30077klzzwxh:30078klzzwxh:30079 throws XAException, SystemExceptionklzzwxh:30150klzzwxh:30080klzzwxh:30081klzzwxh:30082 klzzwxh:30006klzzwxh:30151klzzwxh:30083klzzwxh:30084klzzwxh:30085klzzwxh:30086klzzwxh:30087klzzwxh:30088klzzwxh:30089 InternalXAResourceHolder newResHolder;klzzwxh:30152klzzwxh:30090klzzwxh:30091klzzwxh:30092klzzwxh:30093klzzwxh:30094klzzwxh:30095klzzwxh:30096 Xidklzzwxh:30097klzzwxh:30098klzzwxh:30099klzzwxh:30100klzzwxh:30101klzzwxh:30102klzzwxh:30103klzzwxh:30104klzzwxh:30105klzzwxh:30106klzzwxh:30107klzzwxh:30108klzzwxh:30109 xid;klzzwxh:30153klzzwxh:30110klzzwxh:30111klzzwxh:30112klzzwxh:30113klzzwxh:30114klzzwxh:30115klzzwxh:30116 booleanklzzwxh:30117klzzwxh:30118klzzwxh:30119klzzwxh:30120klzzwxh:30121klzzwxh:30122klzzwxh:30123klzzwxh:30124klzzwxh:30125 differentBranches;klzzwxh:30154klzzwxh:30126klzzwxh:30127klzzwxh:30128klzzwxh:30129klzzwxh:30130klzzwxh:30131klzzwxh:30132 XAResourceHelper helper;

klzzwxh:30199klzzwxh:30200klzzwxh:30201klzzwxh:30202klzzwxh:30203klzzwxh:30204klzzwxh:30205 // Check to see whether we have two resources sharing the sameklzzwxh:30510klzzwxh:30206klzzwxh:30207klzzwxh:30208klzzwxh:30209klzzwxh:30210klzzwxh:30211klzzwxh:30212 // resource manager, in which case use one Xid for both.klzzwxh:30511klzzwxh:30213klzzwxh:30214klzzwxh:30215klzzwxh:30216klzzwxh:30217klzzwxh:30218klzzwxh:30219 try klzzwxh:30155klzzwxh:30512klzzwxh:30220klzzwxh:30221klzzwxh:30222klzzwxh:30223klzzwxh:30224klzzwxh:30225klzzwxh:30226klzzwxh:30227klzzwxh:30228klzzwxh:30229klzzwxh:30230 while klzzwxh:30156 resHolder klzzwxh:30157= null klzzwxh:30158 klzzwxh:30159klzzwxh:30513klzzwxh:30231klzzwxh:30232klzzwxh:30233klzzwxh:30234klzzwxh:30235klzzwxh:30236klzzwxh:30237klzzwxh:30238klzzwxh:30239klzzwxh:30240klzzwxh:30241klzzwxh:30242klzzwxh:30243klzzwxh:30244klzzwxh:30245 if klzzwxh:30160 klzzwxh:30161resHolder.klzzwxh:30162shared klzzwxh:30246klzzwxh:30247 resHolder.klzzwxh:30163xaResource.isSameRMklzzwxh:30164 xaResource klzzwxh:30165 klzzwxh:30166 klzzwxh:30167klzzwxh:30514klzzwxh:30248klzzwxh:30249klzzwxh:30250klzzwxh:30251klzzwxh:30252klzzwxh:30253klzzwxh:30254klzzwxh:30255klzzwxh:30256klzzwxh:30257klzzwxh:30258klzzwxh:30259klzzwxh:30260klzzwxh:30261klzzwxh:30262klzzwxh:30263klzzwxh:30264klzzwxh:30265klzzwxh:30266 helper = XAResourceHelperManager.getHelperklzzwxh:30168 xaResource klzzwxh:30169;klzzwxh:30515klzzwxh:30267klzzwxh:30268klzzwxh:30269klzzwxh:30270klzzwxh:30271klzzwxh:30272klzzwxh:30273klzzwxh:30274klzzwxh:30275klzzwxh:30276klzzwxh:30277klzzwxh:30278klzzwxh:30279klzzwxh:30280klzzwxh:30281klzzwxh:30282klzzwxh:30283klzzwxh:30284klzzwxh:30285 differentBranches = helper.useDifferentBranchesForSharedResourcesklzzwxh:30170klzzwxh:30171;klzzwxh:30516klzzwxh:30286klzzwxh:30287klzzwxh:30288klzzwxh:30289klzzwxh:30290klzzwxh:30291klzzwxh:30292klzzwxh:30293klzzwxh:30294klzzwxh:30295klzzwxh:30296klzzwxh:30297klzzwxh:30298klzzwxh:30299klzzwxh:30300klzzwxh:30301klzzwxh:30302klzzwxh:30303klzzwxh:30304 if klzzwxh:30172 differentBranches klzzwxh:30173 klzzwxh:30174klzzwxh:30517klzzwxh:30305klzzwxh:30306klzzwxh:30307klzzwxh:30308klzzwxh:30309klzzwxh:30310klzzwxh:30311klzzwxh:30312klzzwxh:30313klzzwxh:30314klzzwxh:30315klzzwxh:30316klzzwxh:30317klzzwxh:30318klzzwxh:30319klzzwxh:30320klzzwxh:30321klzzwxh:30322klzzwxh:30323klzzwxh:30324klzzwxh:30325klzzwxh:30326klzzwxh:30327 newResHolder = new InternalXAResourceHolderklzzwxh:30175 xaResource, callback, XAResourceHelperManager.getHelperklzzwxh:30176 xaResource klzzwxh:30177.getXidklzzwxh:30178 xaResource, XidUtils.newBranchklzzwxh:30179 resHolder.klzzwxh:30180xid klzzwxh:30181 klzzwxh:30182, klzzwxh:30518klzzwxh:30328klzzwxh:30329klzzwxh:30330klzzwxh:30331klzzwxh:30332klzzwxh:30333klzzwxh:30334klzzwxh:30335klzzwxh:30336klzzwxh:30337klzzwxh:30338klzzwxh:30339klzzwxh:30340klzzwxh:30341klzzwxh:30342klzzwxh:30343klzzwxh:30344klzzwxh:30345klzzwxh:30346klzzwxh:30347klzzwxh:30348klzzwxh:30349klzzwxh:30350klzzwxh:30351klzzwxh:30352klzzwxh:30353klzzwxh:30354klzzwxh:30355klzzwxh:30356klzzwxh:30357klzzwxh:30358klzzwxh:30359klzzwxh:30360klzzwxh:30361klzzwxh:30362klzzwxh:30363klzzwxh:30364klzzwxh:30365klzzwxh:30366klzzwxh:30367klzzwxh:30368klzzwxh:30369klzzwxh:30370klzzwxh:30371klzzwxh:30372klzzwxh:30373klzzwxh:30374klzzwxh:30375klzzwxh:30376klzzwxh:30377klzzwxh:30378klzzwxh:30379klzzwxh:30380klzzwxh:30381klzzwxh:30382klzzwxh:30383klzzwxh:30384klzzwxh:30385klzzwxh:30386klzzwxh:30387 helper.treatDifferentBranchesForSharedResourcesAsSharedklzzwxh:30183klzzwxh:30184 klzzwxh:30185;klzzwxh:30519klzzwxh:30388klzzwxh:30389klzzwxh:30390klzzwxh:30391klzzwxh:30392klzzwxh:30393klzzwxh:30394klzzwxh:30395klzzwxh:30396klzzwxh:30397klzzwxh:30398klzzwxh:30399klzzwxh:30400klzzwxh:30401klzzwxh:30402klzzwxh:30403klzzwxh:30404klzzwxh:30405klzzwxh:30406 klzzwxh:30186 else klzzwxh:30187klzzwxh:30520klzzwxh:30407klzzwxh:30408klzzwxh:30409klzzwxh:30410klzzwxh:30411klzzwxh:30412klzzwxh:30413klzzwxh:30414klzzwxh:30415klzzwxh:30416klzzwxh:30417klzzwxh:30418klzzwxh:30419klzzwxh:30420klzzwxh:30421klzzwxh:30422klzzwxh:30423klzzwxh:30424klzzwxh:30425klzzwxh:30426klzzwxh:30427klzzwxh:30428klzzwxh:30429 newResHolder = new InternalXAResourceHolderklzzwxh:30188 xaResource, callback, resHolder.klzzwxh:30189xid, true klzzwxh:30190;klzzwxh:30521klzzwxh:30430klzzwxh:30431klzzwxh:30432klzzwxh:30433klzzwxh:30434klzzwxh:30435klzzwxh:30436klzzwxh:30437klzzwxh:30438klzzwxh:30439klzzwxh:30440klzzwxh:30441klzzwxh:30442klzzwxh:30443klzzwxh:30444klzzwxh:30445klzzwxh:30446klzzwxh:30447klzzwxh:30448 klzzwxh:30191klzzwxh:30522klzzwxh:30449klzzwxh:30450klzzwxh:30451klzzwxh:30452klzzwxh:30453klzzwxh:30454klzzwxh:30455klzzwxh:30456klzzwxh:30457klzzwxh:30458klzzwxh:30459klzzwxh:30460klzzwxh:30461klzzwxh:30462klzzwxh:30463klzzwxh:30464klzzwxh:30465klzzwxh:30466klzzwxh:30467 klzzwxh:30523klzzwxh:30468klzzwxh:30469klzzwxh:30470klzzwxh:30471klzzwxh:30472klzzwxh:30473klzzwxh:30474klzzwxh:30475klzzwxh:30476klzzwxh:30477klzzwxh:30478klzzwxh:30479klzzwxh:30480klzzwxh:30481klzzwxh:30482klzzwxh:30483klzzwxh:30484klzzwxh:30485klzzwxh:30486 if klzzwxh:30192 differentBranches klzzwxh:30193 klzzwxh:30194 klzzwxh:30524klzzwxh:30487klzzwxh:30488klzzwxh:30489klzzwxh:30490klzzwxh:30491klzzwxh:30492klzzwxh:30493klzzwxh:30494klzzwxh:30495klzzwxh:30496klzzwxh:30497klzzwxh:30498klzzwxh:30499klzzwxh:30500klzzwxh:30501klzzwxh:30502klzzwxh:30503klzzwxh:30504klzzwxh:30505klzzwxh:30506klzzwxh:30507klzzwxh:30508klzzwxh:30509 newResHolder.klzzwxh:30195xaResource.startklzzwxh:30196 newResHolder.klzzwxh:30197xid, XAResource.TMNOFLAGS klzzwxh:30198;

klzzwxh:30553klzzwxh:30554klzzwxh:30555klzzwxh:30556klzzwxh:30557klzzwxh:30558klzzwxh:30559klzzwxh:30560klzzwxh:30561klzzwxh:30562klzzwxh:30563klzzwxh:30564klzzwxh:30565klzzwxh:30566klzzwxh:30567klzzwxh:30568klzzwxh:30569klzzwxh:30570klzzwxh:30571klzzwxh:30572klzzwxh:30573klzzwxh:30574klzzwxh:30575 if klzzwxh:30525 null klzzwxh:30526= callback klzzwxh:30527 klzzwxh:30528klzzwxh:30828klzzwxh:30576klzzwxh:30577klzzwxh:30578klzzwxh:30579klzzwxh:30580klzzwxh:30581klzzwxh:30582klzzwxh:30583klzzwxh:30584klzzwxh:30585klzzwxh:30586klzzwxh:30587klzzwxh:30588klzzwxh:30589klzzwxh:30590klzzwxh:30591klzzwxh:30592klzzwxh:30593klzzwxh:30594klzzwxh:30595klzzwxh:30596klzzwxh:30597klzzwxh:30598klzzwxh:30599klzzwxh:30600klzzwxh:30601klzzwxh:30602 callback.enlistklzzwxh:30529 newResHolder.klzzwxh:30530xid klzzwxh:30531;klzzwxh:30603klzzwxh:30604klzzwxh:30605 klzzwxh:30829klzzwxh:30606klzzwxh:30607klzzwxh:30608klzzwxh:30609klzzwxh:30610klzzwxh:30611klzzwxh:30612klzzwxh:30613klzzwxh:30614klzzwxh:30615klzzwxh:30616klzzwxh:30617klzzwxh:30618klzzwxh:30619klzzwxh:30620klzzwxh:30621klzzwxh:30622klzzwxh:30623klzzwxh:30624klzzwxh:30625klzzwxh:30626klzzwxh:30627klzzwxh:30628 klzzwxh:30532klzzwxh:30830klzzwxh:30629klzzwxh:30630klzzwxh:30631klzzwxh:30632klzzwxh:30633klzzwxh:30634klzzwxh:30635klzzwxh:30636klzzwxh:30637klzzwxh:30638klzzwxh:30639klzzwxh:30640klzzwxh:30641klzzwxh:30642klzzwxh:30643klzzwxh:30644klzzwxh:30645klzzwxh:30646klzzwxh:30647 klzzwxh:30533 else klzzwxh:30534klzzwxh:30831klzzwxh:30648klzzwxh:30649klzzwxh:30650klzzwxh:30651klzzwxh:30652klzzwxh:30653klzzwxh:30654klzzwxh:30655klzzwxh:30656klzzwxh:30657klzzwxh:30658klzzwxh:30659klzzwxh:30660klzzwxh:30661klzzwxh:30662klzzwxh:30663klzzwxh:30664klzzwxh:30665klzzwxh:30666klzzwxh:30667klzzwxh:30668klzzwxh:30669klzzwxh:30670 if klzzwxh:30535 XAResource.TMSUSPEND == resHolder.klzzwxh:30536endFlag klzzwxh:30537 klzzwxh:30538klzzwxh:30832klzzwxh:30671klzzwxh:30672klzzwxh:30673klzzwxh:30674klzzwxh:30675klzzwxh:30676klzzwxh:30677klzzwxh:30678klzzwxh:30679klzzwxh:30680klzzwxh:30681klzzwxh:30682klzzwxh:30683klzzwxh:30684klzzwxh:30685klzzwxh:30686klzzwxh:30687klzzwxh:30688klzzwxh:30689klzzwxh:30690klzzwxh:30691klzzwxh:30692klzzwxh:30693klzzwxh:30694klzzwxh:30695klzzwxh:30696klzzwxh:30697 resHolder.klzzwxh:30539xaResource.startklzzwxh:30540 resHolder.klzzwxh:30541xid, XAResource.TMRESUME klzzwxh:30542;klzzwxh:30833klzzwxh:30698klzzwxh:30699klzzwxh:30700klzzwxh:30701klzzwxh:30702klzzwxh:30703klzzwxh:30704klzzwxh:30705klzzwxh:30706klzzwxh:30707klzzwxh:30708klzzwxh:30709klzzwxh:30710klzzwxh:30711klzzwxh:30712klzzwxh:30713klzzwxh:30714klzzwxh:30715klzzwxh:30716klzzwxh:30717klzzwxh:30718klzzwxh:30719klzzwxh:30720klzzwxh:30721klzzwxh:30722klzzwxh:30723klzzwxh:30724 resHolder.klzzwxh:30543endFlag = XAResource.TMNOFLAGS;klzzwxh:30834klzzwxh:30725klzzwxh:30726klzzwxh:30727klzzwxh:30728klzzwxh:30729klzzwxh:30730klzzwxh:30731klzzwxh:30732klzzwxh:30733klzzwxh:30734klzzwxh:30735klzzwxh:30736klzzwxh:30737klzzwxh:30738klzzwxh:30739klzzwxh:30740klzzwxh:30741klzzwxh:30742klzzwxh:30743klzzwxh:30744klzzwxh:30745klzzwxh:30746klzzwxh:30747 klzzwxh:30544klzzwxh:30835klzzwxh:30748klzzwxh:30749klzzwxh:30750klzzwxh:30751klzzwxh:30752klzzwxh:30753klzzwxh:30754klzzwxh:30755klzzwxh:30756klzzwxh:30757klzzwxh:30758klzzwxh:30759klzzwxh:30760klzzwxh:30761klzzwxh:30762klzzwxh:30763klzzwxh:30764klzzwxh:30765klzzwxh:30766klzzwxh:30767klzzwxh:30768klzzwxh:30769klzzwxh:30770 newResHolder.klzzwxh:30545xaResource.startklzzwxh:30546 newResHolder.klzzwxh:30547xid, XAResource.TMJOIN klzzwxh:30548;klzzwxh:30836klzzwxh:30771klzzwxh:30772klzzwxh:30773klzzwxh:30774klzzwxh:30775klzzwxh:30776klzzwxh:30777klzzwxh:30778klzzwxh:30779klzzwxh:30780klzzwxh:30781klzzwxh:30782klzzwxh:30783klzzwxh:30784klzzwxh:30785klzzwxh:30786klzzwxh:30787klzzwxh:30788klzzwxh:30789 klzzwxh:30549klzzwxh:30837klzzwxh:30790klzzwxh:30791klzzwxh:30792klzzwxh:30793klzzwxh:30794klzzwxh:30795klzzwxh:30796klzzwxh:30797klzzwxh:30798klzzwxh:30799klzzwxh:30800klzzwxh:30801klzzwxh:30802klzzwxh:30803klzzwxh:30804klzzwxh:30805klzzwxh:30806klzzwxh:30807klzzwxh:30808 newResHolder.klzzwxh:30550nextHolder = klzzwxh:30551enlisted;klzzwxh:30838klzzwxh:30809klzzwxh:30810klzzwxh:30811klzzwxh:30812klzzwxh:30813klzzwxh:30814klzzwxh:30815klzzwxh:30816klzzwxh:30817klzzwxh:30818klzzwxh:30819klzzwxh:30820klzzwxh:30821klzzwxh:30822klzzwxh:30823klzzwxh:30824klzzwxh:30825klzzwxh:30826klzzwxh:30827 klzzwxh:30552enlisted = newResHolder;

klzzwxh:30858klzzwxh:30859klzzwxh:30860klzzwxh:30861klzzwxh:30862klzzwxh:30863klzzwxh:30864klzzwxh:30865klzzwxh:30866klzzwxh:30867klzzwxh:30868klzzwxh:30869klzzwxh:30870klzzwxh:30871klzzwxh:30872klzzwxh:30873klzzwxh:30874klzzwxh:30875klzzwxh:30876 return true;klzzwxh:31020klzzwxh:30877klzzwxh:30878klzzwxh:30879klzzwxh:30880klzzwxh:30881klzzwxh:30882klzzwxh:30883klzzwxh:30884klzzwxh:30885klzzwxh:30886klzzwxh:30887klzzwxh:30888klzzwxh:30889klzzwxh:30890klzzwxh:30891 klzzwxh:30839klzzwxh:31021klzzwxh:30892klzzwxh:30893klzzwxh:30894klzzwxh:30895klzzwxh:30896klzzwxh:30897klzzwxh:30898klzzwxh:30899klzzwxh:30900klzzwxh:30901klzzwxh:30902klzzwxh:30903klzzwxh:30904klzzwxh:30905klzzwxh:30906 resHolder = resHolder.klzzwxh:30840nextHolder;klzzwxh:31022klzzwxh:30907klzzwxh:30908klzzwxh:30909klzzwxh:30910klzzwxh:30911klzzwxh:30912klzzwxh:30913klzzwxh:30914klzzwxh:30915klzzwxh:30916klzzwxh:30917 klzzwxh:30841klzzwxh:31023klzzwxh:30918klzzwxh:30919klzzwxh:30920klzzwxh:30921klzzwxh:30922klzzwxh:30923klzzwxh:30924 klzzwxh:30842 catch klzzwxh:30843 XAException except klzzwxh:30844 klzzwxh:30845klzzwxh:31024klzzwxh:30925klzzwxh:30926klzzwxh:30927klzzwxh:30928klzzwxh:30929klzzwxh:30930klzzwxh:30931klzzwxh:30932klzzwxh:30933klzzwxh:30934klzzwxh:30935 // if this is an XA exception from the isSameRM klzzwxh:31025klzzwxh:30936klzzwxh:30937klzzwxh:30938klzzwxh:30939klzzwxh:30940klzzwxh:30941klzzwxh:30942klzzwxh:30943klzzwxh:30944klzzwxh:30945klzzwxh:30946 // method call then return it as a system exceptionklzzwxh:31026klzzwxh:30947klzzwxh:30948klzzwxh:30949klzzwxh:30950klzzwxh:30951klzzwxh:30952klzzwxh:30953klzzwxh:30954klzzwxh:30955klzzwxh:30956klzzwxh:30957 if klzzwxh:30846 klzzwxh:30847 except.errorCode == XAException.XAERklzzwxh:30848RMERR klzzwxh:30849 || klzzwxh:31027klzzwxh:30958klzzwxh:30959klzzwxh:30960klzzwxh:30961klzzwxh:30962klzzwxh:30963klzzwxh:30964klzzwxh:30965klzzwxh:30966klzzwxh:30967klzzwxh:30968klzzwxh:30969klzzwxh:30970klzzwxh:30971klzzwxh:30972klzzwxh:30973 klzzwxh:30850 except.errorCode == XAException.XAERklzzwxh:30851RMFAIL klzzwxh:30852 klzzwxh:30853klzzwxh:31028klzzwxh:30974klzzwxh:30975klzzwxh:30976klzzwxh:30977klzzwxh:30978klzzwxh:30979klzzwxh:30980klzzwxh:30981klzzwxh:30982klzzwxh:30983klzzwxh:30984klzzwxh:30985klzzwxh:30986klzzwxh:30987klzzwxh:30988 throw new NestedSystemExceptionklzzwxh:30854 except klzzwxh:30855;klzzwxh:30989klzzwxh:30990klzzwxh:30991 klzzwxh:31029klzzwxh:30992klzzwxh:30993klzzwxh:30994klzzwxh:30995klzzwxh:30996klzzwxh:30997klzzwxh:30998klzzwxh:30999klzzwxh:31000klzzwxh:31001klzzwxh:31002 throw except;klzzwxh:31030klzzwxh:31003klzzwxh:31004klzzwxh:31005klzzwxh:31006klzzwxh:31007klzzwxh:31008klzzwxh:31009 klzzwxh:30856klzzwxh:31031klzzwxh:31010klzzwxh:31011klzzwxh:31012klzzwxh:31013klzzwxh:31014klzzwxh:31015klzzwxh:31016 return false;klzzwxh:31032klzzwxh:31017klzzwxh:31018klzzwxh:31019 klzzwxh:30857

klzzwxh:31117klzzwxh:31118klzzwxh:31119 /klzzwxh:31033klzzwxh:31034klzzwxh:31566klzzwxh:31120klzzwxh:31121klzzwxh:31122klzzwxh:31123 klzzwxh:31035 Add the new resource to the transaction.klzzwxh:31567klzzwxh:31124klzzwxh:31125klzzwxh:31126klzzwxh:31127 klzzwxh:31036 klzzwxh:31128Pklzzwxh:31129klzzwxh:31568klzzwxh:31130klzzwxh:31131klzzwxh:31132klzzwxh:31133 klzzwxh:31037 It is assumed that this resource has not been addedklzzwxh:31569klzzwxh:31134klzzwxh:31135klzzwxh:31136klzzwxh:31137 klzzwxh:31038 to the transaction before and that the transaction isklzzwxh:31570klzzwxh:31138klzzwxh:31139klzzwxh:31140klzzwxh:31141 klzzwxh:31039 in the correct state for having new resources added to it.klzzwxh:31571klzzwxh:31142klzzwxh:31143klzzwxh:31144klzzwxh:31145 klzzwxh:31040 klzzwxh:31146Pklzzwxh:31147klzzwxh:31572klzzwxh:31148klzzwxh:31149klzzwxh:31150klzzwxh:31151 klzzwxh:31041 This method is called by klzzwxh:31042@link klzzwxh:31043enlistResourceklzzwxh:31044 andklzzwxh:31573klzzwxh:31152klzzwxh:31153klzzwxh:31154klzzwxh:31155 klzzwxh:31045 klzzwxh:31046@link klzzwxh:31047resumeAndEnlistResourcesklzzwxh:31048.klzzwxh:31574klzzwxh:31156klzzwxh:31157klzzwxh:31158klzzwxh:31159 klzzwxh:31049klzzwxh:31575klzzwxh:31160klzzwxh:31161klzzwxh:31162klzzwxh:31163 klzzwxh:31050 @param xa The new resourceklzzwxh:31576klzzwxh:31164klzzwxh:31165klzzwxh:31166klzzwxh:31167 klzzwxh:31051 @return True if the resource has been added.klzzwxh:31577klzzwxh:31168klzzwxh:31169klzzwxh:31170klzzwxh:31171 klzzwxh:31052/klzzwxh:31578klzzwxh:31172klzzwxh:31173klzzwxh:31174 private boolean addNewResourceklzzwxh:31053 XAResource xaResource, XAResourceCallback callback klzzwxh:31054klzzwxh:31579klzzwxh:31175klzzwxh:31176klzzwxh:31177klzzwxh:31178klzzwxh:31179klzzwxh:31180klzzwxh:31181 throws SystemException, RollbackExceptionklzzwxh:31580klzzwxh:31182klzzwxh:31183klzzwxh:31184 klzzwxh:31055klzzwxh:31581klzzwxh:31185klzzwxh:31186klzzwxh:31187klzzwxh:31188klzzwxh:31189klzzwxh:31190klzzwxh:31191 InternalXAResourceHolder resHolder;klzzwxh:31582klzzwxh:31192klzzwxh:31193klzzwxh:31194klzzwxh:31195klzzwxh:31196klzzwxh:31197klzzwxh:31198 Xidklzzwxh:31199klzzwxh:31200klzzwxh:31201klzzwxh:31202klzzwxh:31203klzzwxh:31204klzzwxh:31205klzzwxh:31206klzzwxh:31207klzzwxh:31208klzzwxh:31209klzzwxh:31210klzzwxh:31211 xid;klzzwxh:31583klzzwxh:31212klzzwxh:31213klzzwxh:31214 klzzwxh:31584klzzwxh:31215klzzwxh:31216klzzwxh:31217klzzwxh:31218klzzwxh:31219klzzwxh:31220klzzwxh:31221 try klzzwxh:31056klzzwxh:31585klzzwxh:31222klzzwxh:31223klzzwxh:31224klzzwxh:31225klzzwxh:31226klzzwxh:31227klzzwxh:31228klzzwxh:31229klzzwxh:31230klzzwxh:31231klzzwxh:31232 if klzzwxh:31057 shareResourceklzzwxh:31058 xaResource, callback, klzzwxh:31059enlisted klzzwxh:31060 ||klzzwxh:31586klzzwxh:31233klzzwxh:31234klzzwxh:31235klzzwxh:31236klzzwxh:31237klzzwxh:31238klzzwxh:31239klzzwxh:31240klzzwxh:31241klzzwxh:31242klzzwxh:31243klzzwxh:31244klzzwxh:31245klzzwxh:31246klzzwxh:31247klzzwxh:31248 shareResourceklzzwxh:31061 xaResource, callback, klzzwxh:31062delisted klzzwxh:31063 klzzwxh:31064klzzwxh:31587klzzwxh:31249klzzwxh:31250klzzwxh:31251klzzwxh:31252klzzwxh:31253klzzwxh:31254klzzwxh:31255klzzwxh:31256klzzwxh:31257klzzwxh:31258klzzwxh:31259klzzwxh:31260klzzwxh:31261klzzwxh:31262klzzwxh:31263 return true;klzzwxh:31264klzzwxh:31265klzzwxh:31266 klzzwxh:31588klzzwxh:31267klzzwxh:31268klzzwxh:31269klzzwxh:31270klzzwxh:31271klzzwxh:31272klzzwxh:31273 klzzwxh:31065 catch klzzwxh:31066 XAException except klzzwxh:31067 klzzwxh:31068klzzwxh:31589klzzwxh:31274klzzwxh:31275klzzwxh:31276klzzwxh:31277klzzwxh:31278klzzwxh:31279klzzwxh:31280klzzwxh:31281klzzwxh:31282klzzwxh:31283klzzwxh:31284 return false;klzzwxh:31590klzzwxh:31285klzzwxh:31286klzzwxh:31287klzzwxh:31288klzzwxh:31289klzzwxh:31290klzzwxh:31291 klzzwxh:31069klzzwxh:31591klzzwxh:31292klzzwxh:31293klzzwxh:31294 klzzwxh:31592klzzwxh:31295klzzwxh:31296klzzwxh:31297klzzwxh:31298klzzwxh:31299klzzwxh:31300klzzwxh:31301 // If we got to this point, this is a new resource thatklzzwxh:31593klzzwxh:31302klzzwxh:31303klzzwxh:31304klzzwxh:31305klzzwxh:31306klzzwxh:31307klzzwxh:31308 // is being enlisted. We need to create a new branch Xidklzzwxh:31594klzzwxh:31309klzzwxh:31310klzzwxh:31311klzzwxh:31312klzzwxh:31313klzzwxh:31314klzzwxh:31315 // and to enlist it.klzzwxh:31595klzzwxh:31316klzzwxh:31317klzzwxh:31318klzzwxh:31319klzzwxh:31320klzzwxh:31321klzzwxh:31322 xid = klzzwxh:31070xid.newBranchklzzwxh:31071klzzwxh:31072;klzzwxh:31596klzzwxh:31323klzzwxh:31324klzzwxh:31325klzzwxh:31326klzzwxh:31327klzzwxh:31328klzzwxh:31329 try klzzwxh:31073klzzwxh:31597klzzwxh:31330klzzwxh:31331klzzwxh:31332klzzwxh:31333klzzwxh:31334klzzwxh:31335klzzwxh:31336klzzwxh:31337klzzwxh:31338klzzwxh:31339klzzwxh:31340 xid = XAResourceHelperManager.getHelperklzzwxh:31074 xaResource klzzwxh:31075.getXidklzzwxh:31076 xaResource, xid klzzwxh:31077;klzzwxh:31598klzzwxh:31341klzzwxh:31342klzzwxh:31343klzzwxh:31344klzzwxh:31345klzzwxh:31346klzzwxh:31347 klzzwxh:31078 catch klzzwxh:31079 XAException except klzzwxh:31080 klzzwxh:31081klzzwxh:31599klzzwxh:31348klzzwxh:31349klzzwxh:31350klzzwxh:31351klzzwxh:31352klzzwxh:31353klzzwxh:31354klzzwxh:31355klzzwxh:31356klzzwxh:31357klzzwxh:31358 throw new NestedSystemExceptionklzzwxh:31082 except klzzwxh:31083;klzzwxh:31600klzzwxh:31359klzzwxh:31360klzzwxh:31361klzzwxh:31362klzzwxh:31363klzzwxh:31364klzzwxh:31365 klzzwxh:31084klzzwxh:31601klzzwxh:31366klzzwxh:31367klzzwxh:31368klzzwxh:31369klzzwxh:31370klzzwxh:31371klzzwxh:31372 resHolder = new InternalXAResourceHolderklzzwxh:31085 xaResource, callback, xid, false klzzwxh:31086;klzzwxh:31602klzzwxh:31373klzzwxh:31374klzzwxh:31375klzzwxh:31376klzzwxh:31377klzzwxh:31378klzzwxh:31379 klzzwxh:31603klzzwxh:31380klzzwxh:31381klzzwxh:31382klzzwxh:31383klzzwxh:31384klzzwxh:31385klzzwxh:31386 try klzzwxh:31087klzzwxh:31604klzzwxh:31387klzzwxh:31388klzzwxh:31389klzzwxh:31390klzzwxh:31391klzzwxh:31392klzzwxh:31393klzzwxh:31394klzzwxh:31395klzzwxh:31396klzzwxh:31397 System.out.printlnklzzwxh:31088klzzwxh:31398addNewResourceklzzwxh:31399 + Thread.currentThreadklzzwxh:31089klzzwxh:31090.getNameklzzwxh:31091klzzwxh:31092klzzwxh:31093;klzzwxh:31605klzzwxh:31400klzzwxh:31401klzzwxh:31402klzzwxh:31403klzzwxh:31404klzzwxh:31405klzzwxh:31406klzzwxh:31407klzzwxh:31408klzzwxh:31409klzzwxh:31410 /klzzwxh:31094klzzwxh:31606klzzwxh:31411klzzwxh:31412klzzwxh:31413klzzwxh:31414klzzwxh:31415klzzwxh:31416klzzwxh:31417klzzwxh:31418klzzwxh:31419klzzwxh:31420klzzwxh:31421 if klzzwxh:31095Thread.currentThreadklzzwxh:31096klzzwxh:31097.getNameklzzwxh:31098klzzwxh:31099.startsWithklzzwxh:31100klzzwxh:31422Splitklzzwxh:31423klzzwxh:31101klzzwxh:31102klzzwxh:31607klzzwxh:31424klzzwxh:31425klzzwxh:31426klzzwxh:31427klzzwxh:31428klzzwxh:31429klzzwxh:31430klzzwxh:31431klzzwxh:31432klzzwxh:31433klzzwxh:31434 klzzwxh:31103klzzwxh:31608klzzwxh:31435klzzwxh:31436klzzwxh:31437klzzwxh:31438klzzwxh:31439klzzwxh:31440klzzwxh:31441klzzwxh:31442klzzwxh:31443klzzwxh:31444klzzwxh:31445klzzwxh:31446klzzwxh:31447klzzwxh:31448klzzwxh:31449 xaResource.startklzzwxh:31104 xid, XAResource.TMJOIN klzzwxh:31105;klzzwxh:31609klzzwxh:31450klzzwxh:31451klzzwxh:31452klzzwxh:31453klzzwxh:31454klzzwxh:31455klzzwxh:31456klzzwxh:31457klzzwxh:31458klzzwxh:31459klzzwxh:31460 klzzwxh:31106klzzwxh:31610klzzwxh:31461klzzwxh:31462klzzwxh:31463klzzwxh:31464klzzwxh:31465klzzwxh:31466klzzwxh:31467klzzwxh:31468klzzwxh:31469klzzwxh:31470klzzwxh:31471 elseklzzwxh:31611klzzwxh:31472klzzwxh:31473klzzwxh:31474klzzwxh:31475klzzwxh:31476klzzwxh:31477klzzwxh:31478klzzwxh:31479klzzwxh:31480klzzwxh:31481klzzwxh:31482 klzzwxh:31107klzzwxh:31612klzzwxh:31483klzzwxh:31484klzzwxh:31485klzzwxh:31486klzzwxh:31487klzzwxh:31488klzzwxh:31489klzzwxh:31490klzzwxh:31491klzzwxh:31492klzzwxh:31493klzzwxh:31494klzzwxh:31495klzzwxh:31496klzzwxh:31497 xaResource.startklzzwxh:31108 xid, XAResource.TMNOFLAGS klzzwxh:31109;klzzwxh:31613klzzwxh:31498klzzwxh:31499klzzwxh:31500klzzwxh:31501klzzwxh:31502klzzwxh:31503klzzwxh:31504klzzwxh:31505klzzwxh:31506klzzwxh:31507klzzwxh:31508 klzzwxh:31110klzzwxh:31614klzzwxh:31509klzzwxh:31510klzzwxh:31511klzzwxh:31512klzzwxh:31513klzzwxh:31514klzzwxh:31515klzzwxh:31516klzzwxh:31517klzzwxh:31518klzzwxh:31519 klzzwxh:31111/klzzwxh:31615klzzwxh:31520klzzwxh:31521klzzwxh:31522klzzwxh:31523klzzwxh:31524klzzwxh:31525klzzwxh:31526klzzwxh:31527klzzwxh:31528klzzwxh:31529klzzwxh:31530klzzwxh:31531klzzwxh:31532 klzzwxh:31616klzzwxh:31533klzzwxh:31534klzzwxh:31535klzzwxh:31536klzzwxh:31537klzzwxh:31538klzzwxh:31539klzzwxh:31540klzzwxh:31541klzzwxh:31542klzzwxh:31543 xaResource.startklzzwxh:31112 xid, XAResource.TMNOFLAGS klzzwxh:31113;klzzwxh:31617klzzwxh:31544klzzwxh:31545klzzwxh:31546klzzwxh:31547klzzwxh:31548klzzwxh:31549klzzwxh:31550klzzwxh:31551klzzwxh:31552klzzwxh:31553klzzwxh:31554 resHolder.klzzwxh:31114nextHolder = klzzwxh:31115enlisted;klzzwxh:31618klzzwxh:31555klzzwxh:31556klzzwxh:31557klzzwxh:31558klzzwxh:31559klzzwxh:31560klzzwxh:31561klzzwxh:31562klzzwxh:31563klzzwxh:31564klzzwxh:31565 klzzwxh:31116enlisted = resHolder;

klzzwxh:31626klzzwxh:31627klzzwxh:31628klzzwxh:31629klzzwxh:31630klzzwxh:31631klzzwxh:31632klzzwxh:31633klzzwxh:31634klzzwxh:31635klzzwxh:31636 if klzzwxh:31619 null klzzwxh:31620= callback klzzwxh:31621 klzzwxh:31622klzzwxh:31666klzzwxh:31637klzzwxh:31638klzzwxh:31639klzzwxh:31640klzzwxh:31641klzzwxh:31642klzzwxh:31643klzzwxh:31644klzzwxh:31645klzzwxh:31646klzzwxh:31647klzzwxh:31648klzzwxh:31649klzzwxh:31650klzzwxh:31651 callback.enlistklzzwxh:31623 xid klzzwxh:31624;klzzwxh:31652klzzwxh:31653klzzwxh:31654 klzzwxh:31667klzzwxh:31655klzzwxh:31656klzzwxh:31657klzzwxh:31658klzzwxh:31659klzzwxh:31660klzzwxh:31661klzzwxh:31662klzzwxh:31663klzzwxh:31664klzzwxh:31665 klzzwxh:31625

klzzwxh:31682klzzwxh:31683klzzwxh:31684klzzwxh:31685klzzwxh:31686klzzwxh:31687klzzwxh:31688klzzwxh:31689klzzwxh:31690klzzwxh:31691klzzwxh:31692 return true;klzzwxh:31750klzzwxh:31693klzzwxh:31694klzzwxh:31695klzzwxh:31696klzzwxh:31697klzzwxh:31698klzzwxh:31699 klzzwxh:31668 catch klzzwxh:31669 XAException except klzzwxh:31670 klzzwxh:31671klzzwxh:31751klzzwxh:31700klzzwxh:31701klzzwxh:31702klzzwxh:31703klzzwxh:31704klzzwxh:31705klzzwxh:31706klzzwxh:31707klzzwxh:31708klzzwxh:31709klzzwxh:31710 xaErrorklzzwxh:31672 resHolder, except klzzwxh:31673;klzzwxh:31752klzzwxh:31711klzzwxh:31712klzzwxh:31713klzzwxh:31714klzzwxh:31715klzzwxh:31716klzzwxh:31717klzzwxh:31718klzzwxh:31719klzzwxh:31720klzzwxh:31721 return false;klzzwxh:31753klzzwxh:31722klzzwxh:31723klzzwxh:31724klzzwxh:31725klzzwxh:31726klzzwxh:31727klzzwxh:31728 klzzwxh:31674 catch klzzwxh:31675 Exception except klzzwxh:31676 klzzwxh:31677klzzwxh:31754klzzwxh:31729klzzwxh:31730klzzwxh:31731klzzwxh:31732klzzwxh:31733klzzwxh:31734klzzwxh:31735klzzwxh:31736klzzwxh:31737klzzwxh:31738klzzwxh:31739 throw new NestedSystemExceptionklzzwxh:31678 except klzzwxh:31679;klzzwxh:31755klzzwxh:31740klzzwxh:31741klzzwxh:31742klzzwxh:31743klzzwxh:31744klzzwxh:31745klzzwxh:31746 klzzwxh:31680klzzwxh:31756klzzwxh:31747klzzwxh:31748klzzwxh:31749 klzzwxh:31681

klzzwxh:31774klzzwxh:31775klzzwxh:31776 /klzzwxh:31757klzzwxh:31758klzzwxh:31818klzzwxh:31777klzzwxh:31778klzzwxh:31779klzzwxh:31780 klzzwxh:31759 Called by a subtransaction to dissociate itself from the parentklzzwxh:31819klzzwxh:31781klzzwxh:31782klzzwxh:31783klzzwxh:31784 klzzwxh:31760 transaction when the subtransaction has been rolledback, toklzzwxh:31820klzzwxh:31785klzzwxh:31786klzzwxh:31787klzzwxh:31788 klzzwxh:31761 prevent rolling back the parent transaction, see klzzwxh:31762@linkklzzwxh:31821klzzwxh:31789klzzwxh:31790klzzwxh:31791klzzwxh:31792 klzzwxh:31763 klzzwxh:31764rollbackklzzwxh:31765.klzzwxh:31822klzzwxh:31793klzzwxh:31794klzzwxh:31795klzzwxh:31796 klzzwxh:31766klzzwxh:31823klzzwxh:31797klzzwxh:31798klzzwxh:31799klzzwxh:31800 klzzwxh:31767 @param resource The subtransaction as a resourceklzzwxh:31824klzzwxh:31801klzzwxh:31802klzzwxh:31803klzzwxh:31804 klzzwxh:31768/klzzwxh:31825klzzwxh:31805klzzwxh:31806klzzwxh:31807 private synchronized void unregisterResourceklzzwxh:31769 Resource resource klzzwxh:31770klzzwxh:31826klzzwxh:31808klzzwxh:31809klzzwxh:31810 klzzwxh:31771klzzwxh:31827klzzwxh:31811klzzwxh:31812klzzwxh:31813klzzwxh:31814klzzwxh:31815klzzwxh:31816klzzwxh:31817 Resourceklzzwxh:31772klzzwxh:31773 newResources;

klzzwxh:31828klzzwxh:31829klzzwxh:31830klzzwxh:31831klzzwxh:31832klzzwxh:31833klzzwxh:31834 // Note about equality tests:klzzwxh:31871klzzwxh:31835klzzwxh:31836klzzwxh:31837klzzwxh:31838klzzwxh:31839klzzwxh:31840klzzwxh:31841 //klzzwxh:31842klzzwxh:31843 We are called to remove a resource R1 previously createdklzzwxh:31872klzzwxh:31844klzzwxh:31845klzzwxh:31846klzzwxh:31847klzzwxh:31848klzzwxh:31849klzzwxh:31850 //klzzwxh:31851klzzwxh:31852 for same transaction, but are called with resource R2klzzwxh:31873klzzwxh:31853klzzwxh:31854klzzwxh:31855klzzwxh:31856klzzwxh:31857klzzwxh:31858klzzwxh:31859 //klzzwxh:31860klzzwxh:31861 created for the same transaction. The only way to detectklzzwxh:31874klzzwxh:31862klzzwxh:31863klzzwxh:31864klzzwxh:31865klzzwxh:31866klzzwxh:31867klzzwxh:31868 //klzzwxh:31869klzzwxh:31870 if the two are equivalent is through object equality.

klzzwxh:31920klzzwxh:31921klzzwxh:31922klzzwxh:31923klzzwxh:31924klzzwxh:31925klzzwxh:31926 if klzzwxh:31875 klzzwxh:31876resources klzzwxh:31877= null klzzwxh:31878 klzzwxh:31879klzzwxh:32141klzzwxh:31927klzzwxh:31928klzzwxh:31929klzzwxh:31930klzzwxh:31931klzzwxh:31932klzzwxh:31933klzzwxh:31934klzzwxh:31935klzzwxh:31936klzzwxh:31937 if klzzwxh:31880 klzzwxh:31881resources.length == 1 klzzwxh:31938klzzwxh:31939 klzzwxh:31882resourcesklzzwxh:31883 0 klzzwxh:31884.equalsklzzwxh:31885 resource klzzwxh:31886 klzzwxh:31887klzzwxh:32142klzzwxh:31940klzzwxh:31941klzzwxh:31942klzzwxh:31943klzzwxh:31944klzzwxh:31945klzzwxh:31946klzzwxh:31947klzzwxh:31948klzzwxh:31949klzzwxh:31950klzzwxh:31951klzzwxh:31952klzzwxh:31953klzzwxh:31954 klzzwxh:31888resources = null;klzzwxh:32143klzzwxh:31955klzzwxh:31956klzzwxh:31957klzzwxh:31958klzzwxh:31959klzzwxh:31960klzzwxh:31961klzzwxh:31962klzzwxh:31963klzzwxh:31964klzzwxh:31965 elseklzzwxh:32144klzzwxh:31966klzzwxh:31967klzzwxh:31968klzzwxh:31969klzzwxh:31970klzzwxh:31971klzzwxh:31972klzzwxh:31973klzzwxh:31974klzzwxh:31975klzzwxh:31976klzzwxh:31977klzzwxh:31978klzzwxh:31979klzzwxh:31980 for klzzwxh:31889 int i = klzzwxh:31890resources.length ; i-- klzzwxh:31981 0 ; klzzwxh:31891 klzzwxh:31892klzzwxh:32145klzzwxh:31982klzzwxh:31983klzzwxh:31984klzzwxh:31985klzzwxh:31986klzzwxh:31987klzzwxh:31988klzzwxh:31989klzzwxh:31990klzzwxh:31991klzzwxh:31992klzzwxh:31993klzzwxh:31994klzzwxh:31995klzzwxh:31996klzzwxh:31997klzzwxh:31998klzzwxh:31999klzzwxh:32000 if klzzwxh:31893 klzzwxh:31894resourcesklzzwxh:31895 i klzzwxh:31896.equalsklzzwxh:31897 resource klzzwxh:31898 klzzwxh:31899 klzzwxh:31900klzzwxh:32146klzzwxh:32001klzzwxh:32002klzzwxh:32003klzzwxh:32004klzzwxh:32005klzzwxh:32006klzzwxh:32007klzzwxh:32008klzzwxh:32009klzzwxh:32010klzzwxh:32011klzzwxh:32012klzzwxh:32013klzzwxh:32014klzzwxh:32015klzzwxh:32016klzzwxh:32017klzzwxh:32018klzzwxh:32019klzzwxh:32020klzzwxh:32021klzzwxh:32022klzzwxh:32023 klzzwxh:31901resourcesklzzwxh:31902 i klzzwxh:31903 = klzzwxh:31904resourcesklzzwxh:31905 klzzwxh:31906resources.length - 1 klzzwxh:31907;klzzwxh:32147klzzwxh:32024klzzwxh:32025klzzwxh:32026klzzwxh:32027klzzwxh:32028klzzwxh:32029klzzwxh:32030klzzwxh:32031klzzwxh:32032klzzwxh:32033klzzwxh:32034klzzwxh:32035klzzwxh:32036klzzwxh:32037klzzwxh:32038klzzwxh:32039klzzwxh:32040klzzwxh:32041klzzwxh:32042klzzwxh:32043klzzwxh:32044klzzwxh:32045klzzwxh:32046 newResources = new Resourceklzzwxh:31908 klzzwxh:31909resources.length - 1 klzzwxh:31910;klzzwxh:32148klzzwxh:32047klzzwxh:32048klzzwxh:32049klzzwxh:32050klzzwxh:32051klzzwxh:32052klzzwxh:32053klzzwxh:32054klzzwxh:32055klzzwxh:32056klzzwxh:32057klzzwxh:32058klzzwxh:32059klzzwxh:32060klzzwxh:32061klzzwxh:32062klzzwxh:32063klzzwxh:32064klzzwxh:32065klzzwxh:32066klzzwxh:32067klzzwxh:32068klzzwxh:32069 System.arraycopyklzzwxh:31911 klzzwxh:31912resources, 0, newResources,klzzwxh:32070 0, klzzwxh:31913resources.length - 1 klzzwxh:31914;klzzwxh:32149klzzwxh:32071klzzwxh:32072klzzwxh:32073klzzwxh:32074klzzwxh:32075klzzwxh:32076klzzwxh:32077klzzwxh:32078klzzwxh:32079klzzwxh:32080klzzwxh:32081klzzwxh:32082klzzwxh:32083klzzwxh:32084klzzwxh:32085klzzwxh:32086klzzwxh:32087klzzwxh:32088klzzwxh:32089klzzwxh:32090klzzwxh:32091klzzwxh:32092klzzwxh:32093 klzzwxh:31915resources = newResources;klzzwxh:32150klzzwxh:32094klzzwxh:32095klzzwxh:32096klzzwxh:32097klzzwxh:32098klzzwxh:32099klzzwxh:32100klzzwxh:32101klzzwxh:32102klzzwxh:32103klzzwxh:32104klzzwxh:32105klzzwxh:32106klzzwxh:32107klzzwxh:32108klzzwxh:32109klzzwxh:32110klzzwxh:32111klzzwxh:32112 klzzwxh:31916klzzwxh:32151klzzwxh:32113klzzwxh:32114klzzwxh:32115klzzwxh:32116klzzwxh:32117klzzwxh:32118klzzwxh:32119klzzwxh:32120klzzwxh:32121klzzwxh:32122klzzwxh:32123klzzwxh:32124klzzwxh:32125klzzwxh:32126klzzwxh:32127 klzzwxh:31917klzzwxh:32152klzzwxh:32128klzzwxh:32129klzzwxh:32130klzzwxh:32131klzzwxh:32132klzzwxh:32133klzzwxh:32134 klzzwxh:31918klzzwxh:32153klzzwxh:32135klzzwxh:32136klzzwxh:32137 klzzwxh:31919klzzwxh:32154klzzwxh:32138klzzwxh:32139klzzwxh:32140

klzzwxh:32186klzzwxh:32187klzzwxh:32188 /klzzwxh:32155klzzwxh:32156klzzwxh:32242klzzwxh:32189klzzwxh:32190klzzwxh:32191klzzwxh:32192 klzzwxh:32157 Used internally to report erros occuring during a transactionklzzwxh:32243klzzwxh:32193klzzwxh:32194klzzwxh:32195klzzwxh:32196 klzzwxh:32158 commit/rollback. The first general error to occur will beklzzwxh:32244klzzwxh:32197klzzwxh:32198klzzwxh:32199klzzwxh:32200 klzzwxh:32159 recorded in klzzwxh:32160@link klzzwxh:32161klzzwxh:32162sysErrorklzzwxh:32163 as a klzzwxh:32164@link SystemExceptionklzzwxh:32165,klzzwxh:32245klzzwxh:32201klzzwxh:32202klzzwxh:32203klzzwxh:32204 klzzwxh:32166 and possibly thrown from klzzwxh:32167@link klzzwxh:32168commitklzzwxh:32169 or klzzwxh:32170@link klzzwxh:32171rollbackklzzwxh:32172.klzzwxh:32246klzzwxh:32205klzzwxh:32206klzzwxh:32207klzzwxh:32208 klzzwxh:32173 klzzwxh:32174@link XAExceptionklzzwxh:32175 are also supported, but should not beklzzwxh:32247klzzwxh:32209klzzwxh:32210klzzwxh:32211klzzwxh:32212 klzzwxh:32176 reported unless they are of an unspecified type klzzwxh:32177e.g. protocol,klzzwxh:32248klzzwxh:32213klzzwxh:32214klzzwxh:32215klzzwxh:32216 klzzwxh:32178 communication, or other inconsistency errorklzzwxh:32179.klzzwxh:32249klzzwxh:32217klzzwxh:32218klzzwxh:32219klzzwxh:32220 klzzwxh:32180klzzwxh:32250klzzwxh:32221klzzwxh:32222klzzwxh:32223klzzwxh:32224 klzzwxh:32181 @param except An error that occured during commit/rollbackklzzwxh:32251klzzwxh:32225klzzwxh:32226klzzwxh:32227klzzwxh:32228 klzzwxh:32182/klzzwxh:32252klzzwxh:32229klzzwxh:32230klzzwxh:32231 private void errorklzzwxh:32183 Throwable except klzzwxh:32184klzzwxh:32253klzzwxh:32232klzzwxh:32233klzzwxh:32234 klzzwxh:32185klzzwxh:32254klzzwxh:32235klzzwxh:32236klzzwxh:32237klzzwxh:32238klzzwxh:32239klzzwxh:32240klzzwxh:32241 Throwable orig;

klzzwxh:32266klzzwxh:32267klzzwxh:32268klzzwxh:32269klzzwxh:32270klzzwxh:32271klzzwxh:32272 // If a remote exception, we would rather record the underlyingklzzwxh:32326klzzwxh:32273klzzwxh:32274klzzwxh:32275klzzwxh:32276klzzwxh:32277klzzwxh:32278klzzwxh:32279 // exception directly.klzzwxh:32327klzzwxh:32280klzzwxh:32281klzzwxh:32282klzzwxh:32283klzzwxh:32284klzzwxh:32285klzzwxh:32286 if klzzwxh:32255 except instanceof RemoteException klzzwxh:32287klzzwxh:32288klzzwxh:32328klzzwxh:32289klzzwxh:32290klzzwxh:32291klzzwxh:32292klzzwxh:32293klzzwxh:32294klzzwxh:32295klzzwxh:32296klzzwxh:32297klzzwxh:32298klzzwxh:32299klzzwxh:32300 klzzwxh:32256 klzzwxh:32257RemoteExceptionklzzwxh:32258 except klzzwxh:32259.detail klzzwxh:32260= null klzzwxh:32261klzzwxh:32329klzzwxh:32301klzzwxh:32302klzzwxh:32303klzzwxh:32304klzzwxh:32305klzzwxh:32306klzzwxh:32307klzzwxh:32308klzzwxh:32309klzzwxh:32310klzzwxh:32311 except = klzzwxh:32262 klzzwxh:32263RemoteExceptionklzzwxh:32264 except klzzwxh:32265.detail;klzzwxh:32330klzzwxh:32312klzzwxh:32313klzzwxh:32314klzzwxh:32315klzzwxh:32316klzzwxh:32317klzzwxh:32318 klzzwxh:32331klzzwxh:32319klzzwxh:32320klzzwxh:32321klzzwxh:32322klzzwxh:32323klzzwxh:32324klzzwxh:32325 orig = except;

klzzwxh:32458klzzwxh:32459klzzwxh:32460klzzwxh:32461klzzwxh:32462klzzwxh:32463klzzwxh:32464 // In the event of an XAException, we would like toklzzwxh:33415klzzwxh:32465klzzwxh:32466klzzwxh:32467klzzwxh:32468klzzwxh:32469klzzwxh:32470klzzwxh:32471 // provide a meaningful description of the exception.klzzwxh:33416klzzwxh:32472klzzwxh:32473klzzwxh:32474klzzwxh:32475klzzwxh:32476klzzwxh:32477klzzwxh:32478 // The error code just doesn't cut it.klzzwxh:33417klzzwxh:32479klzzwxh:32480klzzwxh:32481klzzwxh:32482klzzwxh:32483klzzwxh:32484klzzwxh:32485 if klzzwxh:32332 except instanceof XAException klzzwxh:32333 klzzwxh:32334klzzwxh:33418klzzwxh:32486klzzwxh:32487klzzwxh:32488klzzwxh:32489klzzwxh:32490klzzwxh:32491klzzwxh:32492klzzwxh:32493klzzwxh:32494klzzwxh:32495klzzwxh:32496 switch klzzwxh:32335 klzzwxh:32336 klzzwxh:32337XAExceptionklzzwxh:32338 except klzzwxh:32339.errorCode klzzwxh:32340 klzzwxh:32341klzzwxh:33419klzzwxh:32497klzzwxh:32498klzzwxh:32499klzzwxh:32500klzzwxh:32501klzzwxh:32502klzzwxh:32503klzzwxh:32504klzzwxh:32505klzzwxh:32506klzzwxh:32507 case XAException.XAklzzwxh:32342RBROLLBACK:klzzwxh:33420klzzwxh:32508klzzwxh:32509klzzwxh:32510klzzwxh:32511klzzwxh:32512klzzwxh:32513klzzwxh:32514klzzwxh:32515klzzwxh:32516klzzwxh:32517klzzwxh:32518klzzwxh:32519klzzwxh:32520klzzwxh:32521klzzwxh:32522 except = new SystemExceptionklzzwxh:32343 Messages.messageklzzwxh:32344 klzzwxh:32523tyrex.xa.rbrollbackklzzwxh:32524 klzzwxh:32345 klzzwxh:32346;klzzwxh:33421klzzwxh:32525klzzwxh:32526klzzwxh:32527klzzwxh:32528klzzwxh:32529klzzwxh:32530klzzwxh:32531klzzwxh:32532klzzwxh:32533klzzwxh:32534klzzwxh:32535klzzwxh:32536klzzwxh:32537klzzwxh:32538klzzwxh:32539 break;klzzwxh:33422klzzwxh:32540klzzwxh:32541klzzwxh:32542klzzwxh:32543klzzwxh:32544klzzwxh:32545klzzwxh:32546klzzwxh:32547klzzwxh:32548klzzwxh:32549klzzwxh:32550 case XAException.XAklzzwxh:32347RBTIMEOUT:klzzwxh:33423klzzwxh:32551klzzwxh:32552klzzwxh:32553klzzwxh:32554klzzwxh:32555klzzwxh:32556klzzwxh:32557klzzwxh:32558klzzwxh:32559klzzwxh:32560klzzwxh:32561klzzwxh:32562klzzwxh:32563klzzwxh:32564klzzwxh:32565 except = new SystemExceptionklzzwxh:32348 Messages.messageklzzwxh:32349 klzzwxh:32566tyrex.xa.rbtimeoutklzzwxh:32567 klzzwxh:32350 klzzwxh:32351;klzzwxh:33424klzzwxh:32568klzzwxh:32569klzzwxh:32570klzzwxh:32571klzzwxh:32572klzzwxh:32573klzzwxh:32574klzzwxh:32575klzzwxh:32576klzzwxh:32577klzzwxh:32578klzzwxh:32579klzzwxh:32580klzzwxh:32581klzzwxh:32582 break;klzzwxh:33425klzzwxh:32583klzzwxh:32584klzzwxh:32585klzzwxh:32586klzzwxh:32587klzzwxh:32588klzzwxh:32589klzzwxh:32590klzzwxh:32591klzzwxh:32592klzzwxh:32593 case XAException.XAklzzwxh:32352RBCOMMFAIL:klzzwxh:33426klzzwxh:32594klzzwxh:32595klzzwxh:32596klzzwxh:32597klzzwxh:32598klzzwxh:32599klzzwxh:32600klzzwxh:32601klzzwxh:32602klzzwxh:32603klzzwxh:32604klzzwxh:32605klzzwxh:32606klzzwxh:32607klzzwxh:32608 except = new SystemExceptionklzzwxh:32353 Messages.messageklzzwxh:32354 klzzwxh:32609tyrex.xa.rbcommfailklzzwxh:32610 klzzwxh:32355 klzzwxh:32356;klzzwxh:33427klzzwxh:32611klzzwxh:32612klzzwxh:32613klzzwxh:32614klzzwxh:32615klzzwxh:32616klzzwxh:32617klzzwxh:32618klzzwxh:32619klzzwxh:32620klzzwxh:32621klzzwxh:32622klzzwxh:32623klzzwxh:32624klzzwxh:32625 break;klzzwxh:33428klzzwxh:32626klzzwxh:32627klzzwxh:32628klzzwxh:32629klzzwxh:32630klzzwxh:32631klzzwxh:32632klzzwxh:32633klzzwxh:32634klzzwxh:32635klzzwxh:32636 case XAException.XAklzzwxh:32357RBDEADLOCK:klzzwxh:33429klzzwxh:32637klzzwxh:32638klzzwxh:32639klzzwxh:32640klzzwxh:32641klzzwxh:32642klzzwxh:32643klzzwxh:32644klzzwxh:32645klzzwxh:32646klzzwxh:32647klzzwxh:32648klzzwxh:32649klzzwxh:32650klzzwxh:32651 except = new SystemExceptionklzzwxh:32358 Messages.messageklzzwxh:32359 klzzwxh:32652tyrex.xa.rbdeadlockklzzwxh:32653 klzzwxh:32360 klzzwxh:32361;klzzwxh:33430klzzwxh:32654klzzwxh:32655klzzwxh:32656klzzwxh:32657klzzwxh:32658klzzwxh:32659klzzwxh:32660klzzwxh:32661klzzwxh:32662klzzwxh:32663klzzwxh:32664klzzwxh:32665klzzwxh:32666klzzwxh:32667klzzwxh:32668 break;klzzwxh:33431klzzwxh:32669klzzwxh:32670klzzwxh:32671klzzwxh:32672klzzwxh:32673klzzwxh:32674klzzwxh:32675klzzwxh:32676klzzwxh:32677klzzwxh:32678klzzwxh:32679 case XAException.XAklzzwxh:32362RBINTEGRITY:klzzwxh:33432klzzwxh:32680klzzwxh:32681klzzwxh:32682klzzwxh:32683klzzwxh:32684klzzwxh:32685klzzwxh:32686klzzwxh:32687klzzwxh:32688klzzwxh:32689klzzwxh:32690klzzwxh:32691klzzwxh:32692klzzwxh:32693klzzwxh:32694 except = new SystemExceptionklzzwxh:32363 Messages.messageklzzwxh:32364 klzzwxh:32695tyrex.xa.rbintegrityklzzwxh:32696 klzzwxh:32365 klzzwxh:32366;klzzwxh:33433klzzwxh:32697klzzwxh:32698klzzwxh:32699klzzwxh:32700klzzwxh:32701klzzwxh:32702klzzwxh:32703klzzwxh:32704klzzwxh:32705klzzwxh:32706klzzwxh:32707klzzwxh:32708klzzwxh:32709klzzwxh:32710klzzwxh:32711 break;klzzwxh:33434klzzwxh:32712klzzwxh:32713klzzwxh:32714klzzwxh:32715klzzwxh:32716klzzwxh:32717klzzwxh:32718klzzwxh:32719klzzwxh:32720klzzwxh:32721klzzwxh:32722 case XAException.XAklzzwxh:32367RBOTHER:klzzwxh:33435klzzwxh:32723klzzwxh:32724klzzwxh:32725klzzwxh:32726klzzwxh:32727klzzwxh:32728klzzwxh:32729klzzwxh:32730klzzwxh:32731klzzwxh:32732klzzwxh:32733klzzwxh:32734klzzwxh:32735klzzwxh:32736klzzwxh:32737 except = new SystemExceptionklzzwxh:32368 Messages.messageklzzwxh:32369 klzzwxh:32738tyrex.xa.rbotherklzzwxh:32739 klzzwxh:32370 klzzwxh:32371;klzzwxh:33436klzzwxh:32740klzzwxh:32741klzzwxh:32742klzzwxh:32743klzzwxh:32744klzzwxh:32745klzzwxh:32746klzzwxh:32747klzzwxh:32748klzzwxh:32749klzzwxh:32750klzzwxh:32751klzzwxh:32752klzzwxh:32753klzzwxh:32754 break;klzzwxh:33437klzzwxh:32755klzzwxh:32756klzzwxh:32757klzzwxh:32758klzzwxh:32759klzzwxh:32760klzzwxh:32761klzzwxh:32762klzzwxh:32763klzzwxh:32764klzzwxh:32765 case XAException.XAklzzwxh:32372RBPROTO:klzzwxh:33438klzzwxh:32766klzzwxh:32767klzzwxh:32768klzzwxh:32769klzzwxh:32770klzzwxh:32771klzzwxh:32772klzzwxh:32773klzzwxh:32774klzzwxh:32775klzzwxh:32776klzzwxh:32777klzzwxh:32778klzzwxh:32779klzzwxh:32780 except = new SystemExceptionklzzwxh:32373 Messages.messageklzzwxh:32374 klzzwxh:32781tyrex.xa.rbprotoklzzwxh:32782 klzzwxh:32375 klzzwxh:32376;klzzwxh:33439klzzwxh:32783klzzwxh:32784klzzwxh:32785klzzwxh:32786klzzwxh:32787klzzwxh:32788klzzwxh:32789klzzwxh:32790klzzwxh:32791klzzwxh:32792klzzwxh:32793klzzwxh:32794klzzwxh:32795klzzwxh:32796klzzwxh:32797 break;klzzwxh:33440klzzwxh:32798klzzwxh:32799klzzwxh:32800klzzwxh:32801klzzwxh:32802klzzwxh:32803klzzwxh:32804klzzwxh:32805klzzwxh:32806klzzwxh:32807klzzwxh:32808 case XAException.XAklzzwxh:32377HEURHAZ:klzzwxh:33441klzzwxh:32809klzzwxh:32810klzzwxh:32811klzzwxh:32812klzzwxh:32813klzzwxh:32814klzzwxh:32815klzzwxh:32816klzzwxh:32817klzzwxh:32818klzzwxh:32819klzzwxh:32820klzzwxh:32821klzzwxh:32822klzzwxh:32823 except = new SystemExceptionklzzwxh:32378 Messages.messageklzzwxh:32379 klzzwxh:32824tyrex.xa.heurhazklzzwxh:32825 klzzwxh:32380 klzzwxh:32381;klzzwxh:33442klzzwxh:32826klzzwxh:32827klzzwxh:32828klzzwxh:32829klzzwxh:32830klzzwxh:32831klzzwxh:32832klzzwxh:32833klzzwxh:32834klzzwxh:32835klzzwxh:32836klzzwxh:32837klzzwxh:32838klzzwxh:32839klzzwxh:32840 break;klzzwxh:33443klzzwxh:32841klzzwxh:32842klzzwxh:32843klzzwxh:32844klzzwxh:32845klzzwxh:32846klzzwxh:32847klzzwxh:32848klzzwxh:32849klzzwxh:32850klzzwxh:32851 case XAException.XAklzzwxh:32382HEURCOM:klzzwxh:33444klzzwxh:32852klzzwxh:32853klzzwxh:32854klzzwxh:32855klzzwxh:32856klzzwxh:32857klzzwxh:32858klzzwxh:32859klzzwxh:32860klzzwxh:32861klzzwxh:32862klzzwxh:32863klzzwxh:32864klzzwxh:32865klzzwxh:32866 except = new SystemExceptionklzzwxh:32383 Messages.messageklzzwxh:32384 klzzwxh:32867tyrex.xa.heurcomklzzwxh:32868 klzzwxh:32385 klzzwxh:32386;klzzwxh:33445klzzwxh:32869klzzwxh:32870klzzwxh:32871klzzwxh:32872klzzwxh:32873klzzwxh:32874klzzwxh:32875klzzwxh:32876klzzwxh:32877klzzwxh:32878klzzwxh:32879klzzwxh:32880klzzwxh:32881klzzwxh:32882klzzwxh:32883 break;klzzwxh:33446klzzwxh:32884klzzwxh:32885klzzwxh:32886klzzwxh:32887klzzwxh:32888klzzwxh:32889klzzwxh:32890klzzwxh:32891klzzwxh:32892klzzwxh:32893klzzwxh:32894 case XAException.XAklzzwxh:32387HEURRB:klzzwxh:33447klzzwxh:32895klzzwxh:32896klzzwxh:32897klzzwxh:32898klzzwxh:32899klzzwxh:32900klzzwxh:32901klzzwxh:32902klzzwxh:32903klzzwxh:32904klzzwxh:32905klzzwxh:32906klzzwxh:32907klzzwxh:32908klzzwxh:32909 except = new SystemExceptionklzzwxh:32388 Messages.messageklzzwxh:32389 klzzwxh:32910tyrex.xa.heurrbklzzwxh:32911 klzzwxh:32390 klzzwxh:32391;klzzwxh:33448klzzwxh:32912klzzwxh:32913klzzwxh:32914klzzwxh:32915klzzwxh:32916klzzwxh:32917klzzwxh:32918klzzwxh:32919klzzwxh:32920klzzwxh:32921klzzwxh:32922klzzwxh:32923klzzwxh:32924klzzwxh:32925klzzwxh:32926 break;klzzwxh:33449klzzwxh:32927klzzwxh:32928klzzwxh:32929klzzwxh:32930klzzwxh:32931klzzwxh:32932klzzwxh:32933klzzwxh:32934klzzwxh:32935klzzwxh:32936klzzwxh:32937 case XAException.XAklzzwxh:32392HEURMIX:klzzwxh:33450klzzwxh:32938klzzwxh:32939klzzwxh:32940klzzwxh:32941klzzwxh:32942klzzwxh:32943klzzwxh:32944klzzwxh:32945klzzwxh:32946klzzwxh:32947klzzwxh:32948klzzwxh:32949klzzwxh:32950klzzwxh:32951klzzwxh:32952 except = new SystemExceptionklzzwxh:32393 Messages.messageklzzwxh:32394 klzzwxh:32953tyrex.xa.heurmixklzzwxh:32954 klzzwxh:32395 klzzwxh:32396;klzzwxh:33451klzzwxh:32955klzzwxh:32956klzzwxh:32957klzzwxh:32958klzzwxh:32959klzzwxh:32960klzzwxh:32961klzzwxh:32962klzzwxh:32963klzzwxh:32964klzzwxh:32965klzzwxh:32966klzzwxh:32967klzzwxh:32968klzzwxh:32969 break;klzzwxh:33452klzzwxh:32970klzzwxh:32971klzzwxh:32972klzzwxh:32973klzzwxh:32974klzzwxh:32975klzzwxh:32976klzzwxh:32977klzzwxh:32978klzzwxh:32979klzzwxh:32980 case XAException.XAklzzwxh:32397RDONLY:klzzwxh:33453klzzwxh:32981klzzwxh:32982klzzwxh:32983klzzwxh:32984klzzwxh:32985klzzwxh:32986klzzwxh:32987klzzwxh:32988klzzwxh:32989klzzwxh:32990klzzwxh:32991klzzwxh:32992klzzwxh:32993klzzwxh:32994klzzwxh:32995 except = new SystemExceptionklzzwxh:32398 Messages.messageklzzwxh:32399 klzzwxh:32996tyrex.xa.rdonlyklzzwxh:32997 klzzwxh:32400 klzzwxh:32401;klzzwxh:33454klzzwxh:32998klzzwxh:32999klzzwxh:33000klzzwxh:33001klzzwxh:33002klzzwxh:33003klzzwxh:33004klzzwxh:33005klzzwxh:33006klzzwxh:33007klzzwxh:33008klzzwxh:33009klzzwxh:33010klzzwxh:33011klzzwxh:33012 break;klzzwxh:33455klzzwxh:33013klzzwxh:33014klzzwxh:33015klzzwxh:33016klzzwxh:33017klzzwxh:33018klzzwxh:33019klzzwxh:33020klzzwxh:33021klzzwxh:33022klzzwxh:33023 case XAException.XAERklzzwxh:32402NOTA:klzzwxh:33456klzzwxh:33024klzzwxh:33025klzzwxh:33026klzzwxh:33027klzzwxh:33028klzzwxh:33029klzzwxh:33030klzzwxh:33031klzzwxh:33032klzzwxh:33033klzzwxh:33034klzzwxh:33035klzzwxh:33036klzzwxh:33037klzzwxh:33038 except = new SystemExceptionklzzwxh:32403 Messages.messageklzzwxh:32404 klzzwxh:33039tyrex.xa.notaklzzwxh:33040 klzzwxh:32405 klzzwxh:32406;klzzwxh:33457klzzwxh:33041klzzwxh:33042klzzwxh:33043klzzwxh:33044klzzwxh:33045klzzwxh:33046klzzwxh:33047klzzwxh:33048klzzwxh:33049klzzwxh:33050klzzwxh:33051klzzwxh:33052klzzwxh:33053klzzwxh:33054klzzwxh:33055 break;klzzwxh:33458klzzwxh:33056klzzwxh:33057klzzwxh:33058klzzwxh:33059klzzwxh:33060klzzwxh:33061klzzwxh:33062klzzwxh:33063klzzwxh:33064klzzwxh:33065klzzwxh:33066 default:klzzwxh:33459klzzwxh:33067klzzwxh:33068klzzwxh:33069klzzwxh:33070klzzwxh:33071klzzwxh:33072klzzwxh:33073klzzwxh:33074klzzwxh:33075klzzwxh:33076klzzwxh:33077klzzwxh:33078klzzwxh:33079klzzwxh:33080klzzwxh:33081 except = new SystemExceptionklzzwxh:32407 Messages.formatklzzwxh:32408 klzzwxh:33082tyrex.xa.unknownklzzwxh:33083, except klzzwxh:32409 klzzwxh:32410;klzzwxh:33460klzzwxh:33084klzzwxh:33085klzzwxh:33086klzzwxh:33087klzzwxh:33088klzzwxh:33089klzzwxh:33090klzzwxh:33091klzzwxh:33092klzzwxh:33093klzzwxh:33094klzzwxh:33095klzzwxh:33096klzzwxh:33097klzzwxh:33098 break;klzzwxh:33461klzzwxh:33099klzzwxh:33100klzzwxh:33101klzzwxh:33102klzzwxh:33103klzzwxh:33104klzzwxh:33105klzzwxh:33106klzzwxh:33107klzzwxh:33108klzzwxh:33109 klzzwxh:32411klzzwxh:33462klzzwxh:33110klzzwxh:33111klzzwxh:33112klzzwxh:33113klzzwxh:33114klzzwxh:33115klzzwxh:33116 klzzwxh:32412klzzwxh:33463klzzwxh:33117klzzwxh:33118klzzwxh:33119klzzwxh:33120klzzwxh:33121klzzwxh:33122klzzwxh:33123 klzzwxh:33464klzzwxh:33124klzzwxh:33125klzzwxh:33126klzzwxh:33127klzzwxh:33128klzzwxh:33129klzzwxh:33130 // Log the message with whatever logging mechanism we have.klzzwxh:33465klzzwxh:33131klzzwxh:33132klzzwxh:33133klzzwxh:33134klzzwxh:33135klzzwxh:33136klzzwxh:33137 if klzzwxh:32413 klzzwxh:32414 klzzwxh:32415 orig instanceof XAException klzzwxh:32416 klzzwxh:32417klzzwxh:33466klzzwxh:33138klzzwxh:33139klzzwxh:33140klzzwxh:33141klzzwxh:33142klzzwxh:33143klzzwxh:33144klzzwxh:33145klzzwxh:33146klzzwxh:33147klzzwxh:33148 klzzwxh:32418txDomain.klzzwxh:32419category.errorklzzwxh:32420 klzzwxh:33149Error klzzwxh:33150 + orig.toStringklzzwxh:32421klzzwxh:32422 + klzzwxh:33151 reported in transaction klzzwxh:33152 + klzzwxh:32423xid, orig klzzwxh:32424;klzzwxh:33467klzzwxh:33153klzzwxh:33154klzzwxh:33155klzzwxh:33156klzzwxh:33157klzzwxh:33158klzzwxh:33159 elseklzzwxh:33468klzzwxh:33160klzzwxh:33161klzzwxh:33162klzzwxh:33163klzzwxh:33164klzzwxh:33165klzzwxh:33166klzzwxh:33167klzzwxh:33168klzzwxh:33169klzzwxh:33170 klzzwxh:32425txDomain.klzzwxh:32426category.errorklzzwxh:32427 klzzwxh:33171Error klzzwxh:33172 + orig.toStringklzzwxh:32428klzzwxh:32429 + klzzwxh:33469klzzwxh:33173klzzwxh:33174klzzwxh:33175klzzwxh:33176klzzwxh:33177klzzwxh:33178klzzwxh:33179klzzwxh:33180klzzwxh:33181klzzwxh:33182klzzwxh:33183klzzwxh:33184klzzwxh:33185klzzwxh:33186klzzwxh:33187klzzwxh:33188klzzwxh:33189klzzwxh:33190klzzwxh:33191klzzwxh:33192klzzwxh:33193klzzwxh:33194klzzwxh:33195klzzwxh:33196klzzwxh:33197klzzwxh:33198klzzwxh:33199klzzwxh:33200klzzwxh:33201klzzwxh:33202klzzwxh:33203klzzwxh:33204klzzwxh:33205klzzwxh:33206klzzwxh:33207klzzwxh:33208klzzwxh:33209klzzwxh:33210 klzzwxh:33211klzzwxh:32430code klzzwxh:33212 + klzzwxh:32431 klzzwxh:32432XAExceptionklzzwxh:32433 orig klzzwxh:32434.errorCode klzzwxh:33470klzzwxh:33213klzzwxh:33214klzzwxh:33215klzzwxh:33216klzzwxh:33217klzzwxh:33218klzzwxh:33219klzzwxh:33220klzzwxh:33221klzzwxh:33222klzzwxh:33223klzzwxh:33224klzzwxh:33225klzzwxh:33226klzzwxh:33227klzzwxh:33228klzzwxh:33229klzzwxh:33230klzzwxh:33231klzzwxh:33232klzzwxh:33233klzzwxh:33234klzzwxh:33235klzzwxh:33236klzzwxh:33237klzzwxh:33238klzzwxh:33239klzzwxh:33240klzzwxh:33241klzzwxh:33242klzzwxh:33243klzzwxh:33244klzzwxh:33245klzzwxh:33246klzzwxh:33247klzzwxh:33248klzzwxh:33249klzzwxh:33250 + klzzwxh:33251 - klzzwxh:33252 + except.getMessageklzzwxh:32435klzzwxh:32436 + klzzwxh:33253klzzwxh:32437 reported in transaction klzzwxh:33254 klzzwxh:33471klzzwxh:33255klzzwxh:33256klzzwxh:33257klzzwxh:33258klzzwxh:33259klzzwxh:33260klzzwxh:33261klzzwxh:33262klzzwxh:33263klzzwxh:33264klzzwxh:33265klzzwxh:33266klzzwxh:33267klzzwxh:33268klzzwxh:33269klzzwxh:33270klzzwxh:33271klzzwxh:33272klzzwxh:33273klzzwxh:33274klzzwxh:33275klzzwxh:33276klzzwxh:33277klzzwxh:33278klzzwxh:33279klzzwxh:33280klzzwxh:33281klzzwxh:33282klzzwxh:33283klzzwxh:33284klzzwxh:33285klzzwxh:33286klzzwxh:33287klzzwxh:33288klzzwxh:33289klzzwxh:33290klzzwxh:33291klzzwxh:33292 + klzzwxh:32438xid + getXAErrorStringklzzwxh:32439 klzzwxh:32440 XAException klzzwxh:32441 orig klzzwxh:32442, orig klzzwxh:32443;klzzwxh:33472klzzwxh:33293klzzwxh:33294klzzwxh:33295klzzwxh:33296klzzwxh:33297klzzwxh:33298 klzzwxh:33473klzzwxh:33299klzzwxh:33300klzzwxh:33301klzzwxh:33302klzzwxh:33303klzzwxh:33304klzzwxh:33305 // Record the first general exception as a system exception,klzzwxh:33474klzzwxh:33306klzzwxh:33307klzzwxh:33308klzzwxh:33309klzzwxh:33310klzzwxh:33311klzzwxh:33312 // so it may be returned from commit/rollback.klzzwxh:33475klzzwxh:33313klzzwxh:33314klzzwxh:33315klzzwxh:33316klzzwxh:33317klzzwxh:33318klzzwxh:33319 if klzzwxh:32444 klzzwxh:32445sysError == null klzzwxh:32446 klzzwxh:32447klzzwxh:33476klzzwxh:33320klzzwxh:33321klzzwxh:33322klzzwxh:33323klzzwxh:33324klzzwxh:33325klzzwxh:33326klzzwxh:33327klzzwxh:33328klzzwxh:33329klzzwxh:33330 if klzzwxh:32448 except instanceof SystemException klzzwxh:32449klzzwxh:33477klzzwxh:33331klzzwxh:33332klzzwxh:33333klzzwxh:33334klzzwxh:33335klzzwxh:33336klzzwxh:33337klzzwxh:33338klzzwxh:33339klzzwxh:33340klzzwxh:33341klzzwxh:33342klzzwxh:33343klzzwxh:33344klzzwxh:33345 klzzwxh:32450sysError = klzzwxh:32451SystemExceptionklzzwxh:32452 except;klzzwxh:33478klzzwxh:33346klzzwxh:33347klzzwxh:33348klzzwxh:33349klzzwxh:33350klzzwxh:33351klzzwxh:33352klzzwxh:33353klzzwxh:33354klzzwxh:33355klzzwxh:33356 elseklzzwxh:33479klzzwxh:33357klzzwxh:33358klzzwxh:33359klzzwxh:33360klzzwxh:33361klzzwxh:33362klzzwxh:33363klzzwxh:33364klzzwxh:33365klzzwxh:33366klzzwxh:33367klzzwxh:33368klzzwxh:33369klzzwxh:33370klzzwxh:33371 // For any other error, we produce a SystemExceptionklzzwxh:33480klzzwxh:33372klzzwxh:33373klzzwxh:33374klzzwxh:33375klzzwxh:33376klzzwxh:33377klzzwxh:33378klzzwxh:33379klzzwxh:33380klzzwxh:33381klzzwxh:33382klzzwxh:33383klzzwxh:33384klzzwxh:33385klzzwxh:33386 // to wrap it up.klzzwxh:33481klzzwxh:33387klzzwxh:33388klzzwxh:33389klzzwxh:33390klzzwxh:33391klzzwxh:33392klzzwxh:33393klzzwxh:33394klzzwxh:33395klzzwxh:33396klzzwxh:33397klzzwxh:33398klzzwxh:33399klzzwxh:33400klzzwxh:33401 klzzwxh:32453sysError = new NestedSystemExceptionklzzwxh:32454 except klzzwxh:32455;klzzwxh:33482klzzwxh:33402klzzwxh:33403klzzwxh:33404klzzwxh:33405klzzwxh:33406klzzwxh:33407klzzwxh:33408 klzzwxh:32456klzzwxh:33483klzzwxh:33409klzzwxh:33410klzzwxh:33411 klzzwxh:32457klzzwxh:33484klzzwxh:33412klzzwxh:33413klzzwxh:33414

klzzwxh:33495klzzwxh:33496klzzwxh:33497 /klzzwxh:33485klzzwxh:33486klzzwxh:33527klzzwxh:33498klzzwxh:33499klzzwxh:33500klzzwxh:33501 klzzwxh:33487 Describes an klzzwxh:33488@link XAResourceklzzwxh:33489 enlisted with this transaction.klzzwxh:33528klzzwxh:33502klzzwxh:33503klzzwxh:33504klzzwxh:33505 klzzwxh:33490 Each resource enlisted with the transaction will have such a recordklzzwxh:33529klzzwxh:33506klzzwxh:33507klzzwxh:33508klzzwxh:33509 klzzwxh:33491 until the transaction timesout or is forgetted. The only way toklzzwxh:33530klzzwxh:33510klzzwxh:33511klzzwxh:33512klzzwxh:33513 klzzwxh:33492 delist a resource is if it fails.klzzwxh:33531klzzwxh:33514klzzwxh:33515klzzwxh:33516klzzwxh:33517 klzzwxh:33493/klzzwxh:33532klzzwxh:33518klzzwxh:33519klzzwxh:33520 private static class InternalXAResourceHolder extends XAResourceHolderklzzwxh:33533klzzwxh:33521klzzwxh:33522klzzwxh:33523 klzzwxh:33494klzzwxh:33534klzzwxh:33524klzzwxh:33525klzzwxh:33526

klzzwxh:33544klzzwxh:33545klzzwxh:33546klzzwxh:33547klzzwxh:33548klzzwxh:33549klzzwxh:33550 /klzzwxh:33535klzzwxh:33536klzzwxh:33617klzzwxh:33551klzzwxh:33552klzzwxh:33553klzzwxh:33554klzzwxh:33555klzzwxh:33556klzzwxh:33557klzzwxh:33558 klzzwxh:33537 The xid under which this resource is enlisted.klzzwxh:33618klzzwxh:33559klzzwxh:33560klzzwxh:33561klzzwxh:33562klzzwxh:33563klzzwxh:33564klzzwxh:33565klzzwxh:33566 klzzwxh:33538 Generally each resource will have the same global Xid,klzzwxh:33619klzzwxh:33567klzzwxh:33568klzzwxh:33569klzzwxh:33570klzzwxh:33571klzzwxh:33572klzzwxh:33573klzzwxh:33574 klzzwxh:33539 but a different branch, but shared resources will alsoklzzwxh:33620klzzwxh:33575klzzwxh:33576klzzwxh:33577klzzwxh:33578klzzwxh:33579klzzwxh:33580klzzwxh:33581klzzwxh:33582 klzzwxh:33540 share the same branch. In some cases the Xid implementationklzzwxh:33621klzzwxh:33583klzzwxh:33584klzzwxh:33585klzzwxh:33586klzzwxh:33587klzzwxh:33588klzzwxh:33589klzzwxh:33590 klzzwxh:33541 is dictated by the RM.klzzwxh:33622klzzwxh:33591klzzwxh:33592klzzwxh:33593klzzwxh:33594klzzwxh:33595klzzwxh:33596klzzwxh:33597klzzwxh:33598 klzzwxh:33542/klzzwxh:33623klzzwxh:33599klzzwxh:33600klzzwxh:33601klzzwxh:33602klzzwxh:33603klzzwxh:33604klzzwxh:33605 final Xidklzzwxh:33606klzzwxh:33607klzzwxh:33608klzzwxh:33609klzzwxh:33610klzzwxh:33611klzzwxh:33612klzzwxh:33613 klzzwxh:33543xid;klzzwxh:33624klzzwxh:33614klzzwxh:33615klzzwxh:33616

klzzwxh:33652klzzwxh:33653klzzwxh:33654klzzwxh:33655klzzwxh:33656klzzwxh:33657klzzwxh:33658 /klzzwxh:33625klzzwxh:33626klzzwxh:33871klzzwxh:33659klzzwxh:33660klzzwxh:33661klzzwxh:33662klzzwxh:33663klzzwxh:33664klzzwxh:33665klzzwxh:33666 klzzwxh:33627 The flag that the xa resource was ended with.klzzwxh:33872klzzwxh:33667klzzwxh:33668klzzwxh:33669klzzwxh:33670klzzwxh:33671klzzwxh:33672klzzwxh:33673klzzwxh:33674 klzzwxh:33628 If the xa resource has not been ended then theklzzwxh:33873klzzwxh:33675klzzwxh:33676klzzwxh:33677klzzwxh:33678klzzwxh:33679klzzwxh:33680klzzwxh:33681klzzwxh:33682 klzzwxh:33629 value of the endFlag is XAResource.TMNOFLAGS. Ifklzzwxh:33874klzzwxh:33683klzzwxh:33684klzzwxh:33685klzzwxh:33686klzzwxh:33687klzzwxh:33688klzzwxh:33689klzzwxh:33690 klzzwxh:33630 the resource has been suspended the flag is klzzwxh:33875klzzwxh:33691klzzwxh:33692klzzwxh:33693klzzwxh:33694klzzwxh:33695klzzwxh:33696klzzwxh:33697klzzwxh:33698 klzzwxh:33631 XAResource.TMSUSPEND.klzzwxh:33699 IF the resource is resumedklzzwxh:33876klzzwxh:33700klzzwxh:33701klzzwxh:33702klzzwxh:33703klzzwxh:33704klzzwxh:33705klzzwxh:33706klzzwxh:33707 klzzwxh:33632 the flag is reset to XAResource.TMNOFLAGS. klzzwxh:33877klzzwxh:33708klzzwxh:33709klzzwxh:33710klzzwxh:33711klzzwxh:33712klzzwxh:33713klzzwxh:33714klzzwxh:33715 klzzwxh:33633 If the resource has been dissociated from the klzzwxh:33878klzzwxh:33716klzzwxh:33717klzzwxh:33718klzzwxh:33719klzzwxh:33720klzzwxh:33721klzzwxh:33722klzzwxh:33723 klzzwxh:33634 transaction the flag is XAResource.TMSUCCESS.klzzwxh:33879klzzwxh:33724klzzwxh:33725klzzwxh:33726klzzwxh:33727klzzwxh:33728klzzwxh:33729klzzwxh:33730klzzwxh:33731 klzzwxh:33635 If the resource has failed the flag is klzzwxh:33880klzzwxh:33732klzzwxh:33733klzzwxh:33734klzzwxh:33735klzzwxh:33736klzzwxh:33737klzzwxh:33738klzzwxh:33739 klzzwxh:33636 XAResource.TMFAIL. To sum up the valid valuesklzzwxh:33881klzzwxh:33740klzzwxh:33741klzzwxh:33742klzzwxh:33743klzzwxh:33744klzzwxh:33745klzzwxh:33746klzzwxh:33747 klzzwxh:33637 are XAResource.TMNOFLAGS, XAResource.TMSUSPEND,klzzwxh:33882klzzwxh:33748klzzwxh:33749klzzwxh:33750klzzwxh:33751klzzwxh:33752klzzwxh:33753klzzwxh:33754klzzwxh:33755 klzzwxh:33638 XAResource.TMSUCCESS, XAResource.TMFAIL.klzzwxh:33883klzzwxh:33756klzzwxh:33757klzzwxh:33758klzzwxh:33759klzzwxh:33760klzzwxh:33761klzzwxh:33762klzzwxh:33763 klzzwxh:33639/klzzwxh:33884klzzwxh:33764klzzwxh:33765klzzwxh:33766klzzwxh:33767klzzwxh:33768klzzwxh:33769klzzwxh:33770 intklzzwxh:33771klzzwxh:33772klzzwxh:33773klzzwxh:33774klzzwxh:33775klzzwxh:33776klzzwxh:33777klzzwxh:33778klzzwxh:33779klzzwxh:33780klzzwxh:33781klzzwxh:33782klzzwxh:33783klzzwxh:33784 klzzwxh:33640endFlag = XAResource.TMNOFLAGS;klzzwxh:33885klzzwxh:33785klzzwxh:33786klzzwxh:33787klzzwxh:33788klzzwxh:33789klzzwxh:33790klzzwxh:33791 klzzwxh:33886klzzwxh:33792klzzwxh:33793klzzwxh:33794klzzwxh:33795klzzwxh:33796klzzwxh:33797klzzwxh:33798 klzzwxh:33887klzzwxh:33799klzzwxh:33800klzzwxh:33801klzzwxh:33802klzzwxh:33803klzzwxh:33804klzzwxh:33805 /klzzwxh:33641klzzwxh:33642klzzwxh:33888klzzwxh:33806klzzwxh:33807klzzwxh:33808klzzwxh:33809klzzwxh:33810klzzwxh:33811klzzwxh:33812klzzwxh:33813 klzzwxh:33643 A shared resource is one that shares it's transactionklzzwxh:33889klzzwxh:33814klzzwxh:33815klzzwxh:33816klzzwxh:33817klzzwxh:33818klzzwxh:33819klzzwxh:33820klzzwxh:33821 klzzwxh:33644 branch with another resource klzzwxh:33645e.g. two JDBC connectionsklzzwxh:33890klzzwxh:33822klzzwxh:33823klzzwxh:33824klzzwxh:33825klzzwxh:33826klzzwxh:33827klzzwxh:33828klzzwxh:33829 klzzwxh:33646 to the same databaseklzzwxh:33647. Only one of the shared resourcesklzzwxh:33891klzzwxh:33830klzzwxh:33831klzzwxh:33832klzzwxh:33833klzzwxh:33834klzzwxh:33835klzzwxh:33836klzzwxh:33837 klzzwxh:33648 must be commited or rolled back, although both should beklzzwxh:33892klzzwxh:33838klzzwxh:33839klzzwxh:33840klzzwxh:33841klzzwxh:33842klzzwxh:33843klzzwxh:33844klzzwxh:33845 klzzwxh:33649 notified when the transaction terminates.klzzwxh:33893klzzwxh:33846klzzwxh:33847klzzwxh:33848klzzwxh:33849klzzwxh:33850klzzwxh:33851klzzwxh:33852klzzwxh:33853 klzzwxh:33650/klzzwxh:33894klzzwxh:33854klzzwxh:33855klzzwxh:33856klzzwxh:33857klzzwxh:33858klzzwxh:33859klzzwxh:33860 booleanklzzwxh:33861klzzwxh:33862klzzwxh:33863klzzwxh:33864klzzwxh:33865klzzwxh:33866klzzwxh:33867klzzwxh:33868klzzwxh:33869klzzwxh:33870 klzzwxh:33651shared;

klzzwxh:33903klzzwxh:33904klzzwxh:33905 klzzwxh:33970klzzwxh:33906klzzwxh:33907klzzwxh:33908klzzwxh:33909klzzwxh:33910klzzwxh:33911klzzwxh:33912 /klzzwxh:33895klzzwxh:33896klzzwxh:33971klzzwxh:33913klzzwxh:33914klzzwxh:33915klzzwxh:33916klzzwxh:33917klzzwxh:33918klzzwxh:33919klzzwxh:33920 klzzwxh:33897 This flag is used during 2pc to indicate whether the resourceklzzwxh:33972klzzwxh:33921klzzwxh:33922klzzwxh:33923klzzwxh:33924klzzwxh:33925klzzwxh:33926klzzwxh:33927klzzwxh:33928 klzzwxh:33898 should be commited/rolledback. Shared resources and those thatklzzwxh:33973klzzwxh:33929klzzwxh:33930klzzwxh:33931klzzwxh:33932klzzwxh:33933klzzwxh:33934klzzwxh:33935klzzwxh:33936 klzzwxh:33899 indicated they are read-only during preperation do not needklzzwxh:33974klzzwxh:33937klzzwxh:33938klzzwxh:33939klzzwxh:33940klzzwxh:33941klzzwxh:33942klzzwxh:33943klzzwxh:33944 klzzwxh:33900 to be commited/rolledback.klzzwxh:33975klzzwxh:33945klzzwxh:33946klzzwxh:33947klzzwxh:33948klzzwxh:33949klzzwxh:33950klzzwxh:33951klzzwxh:33952 klzzwxh:33901/klzzwxh:33976klzzwxh:33953klzzwxh:33954klzzwxh:33955klzzwxh:33956klzzwxh:33957klzzwxh:33958klzzwxh:33959 booleanklzzwxh:33960klzzwxh:33961klzzwxh:33962klzzwxh:33963klzzwxh:33964klzzwxh:33965klzzwxh:33966klzzwxh:33967klzzwxh:33968klzzwxh:33969 klzzwxh:33902readOnly;

klzzwxh:33983klzzwxh:33984klzzwxh:33985klzzwxh:33986klzzwxh:33987klzzwxh:33988klzzwxh:33989 /klzzwxh:33977klzzwxh:33978klzzwxh:34022klzzwxh:33990klzzwxh:33991klzzwxh:33992klzzwxh:33993klzzwxh:33994klzzwxh:33995klzzwxh:33996klzzwxh:33997 klzzwxh:33979 Reference to the next XA resource holder in a single linked-listklzzwxh:34023klzzwxh:33998klzzwxh:33999klzzwxh:34000klzzwxh:34001klzzwxh:34002klzzwxh:34003klzzwxh:34004klzzwxh:34005 klzzwxh:33980 of either enlisted or delisted resources.klzzwxh:34024klzzwxh:34006klzzwxh:34007klzzwxh:34008klzzwxh:34009klzzwxh:34010klzzwxh:34011klzzwxh:34012klzzwxh:34013 klzzwxh:33981/klzzwxh:34025klzzwxh:34014klzzwxh:34015klzzwxh:34016klzzwxh:34017klzzwxh:34018klzzwxh:34019klzzwxh:34020 InternalXAResourceHolderklzzwxh:34021 klzzwxh:33982nextHolder;

klzzwxh:34034klzzwxh:34035klzzwxh:34036klzzwxh:34037klzzwxh:34038klzzwxh:34039klzzwxh:34040 InternalXAResourceHolderklzzwxh:34026 XAResource xaResource, XAResourceCallback callback, Xid xid, boolean shared klzzwxh:34027klzzwxh:34091klzzwxh:34041klzzwxh:34042klzzwxh:34043klzzwxh:34044klzzwxh:34045klzzwxh:34046klzzwxh:34047 klzzwxh:34028klzzwxh:34092klzzwxh:34048klzzwxh:34049klzzwxh:34050klzzwxh:34051klzzwxh:34052klzzwxh:34053klzzwxh:34054klzzwxh:34055klzzwxh:34056klzzwxh:34057klzzwxh:34058 superklzzwxh:34029 xaResource, callback klzzwxh:34030;klzzwxh:34093klzzwxh:34059klzzwxh:34060klzzwxh:34061klzzwxh:34062klzzwxh:34063klzzwxh:34064klzzwxh:34065klzzwxh:34066klzzwxh:34067klzzwxh:34068klzzwxh:34069 klzzwxh:34031xid = xid;klzzwxh:34094klzzwxh:34070klzzwxh:34071klzzwxh:34072klzzwxh:34073klzzwxh:34074klzzwxh:34075klzzwxh:34076klzzwxh:34077klzzwxh:34078klzzwxh:34079klzzwxh:34080 klzzwxh:34032shared = shared;klzzwxh:34095klzzwxh:34081klzzwxh:34082klzzwxh:34083klzzwxh:34084klzzwxh:34085klzzwxh:34086klzzwxh:34087 klzzwxh:34033klzzwxh:34096klzzwxh:34088klzzwxh:34089klzzwxh:34090

klzzwxh:34098klzzwxh:34099klzzwxh:34100 klzzwxh:34097

klzzwxh:34102klzzwxh:34103klzzwxh:34104 klzzwxh:34105klzzwxh:34101