Class LastResourceRecord

java.lang.Object
com.arjuna.ats.arjuna.StateManager
com.arjuna.ats.arjuna.coordinator.AbstractRecord
com.arjuna.ats.internal.arjuna.abstractrecords.LastResourceRecord

public class LastResourceRecord extends AbstractRecord
AbstractRecord that helps us do the last resource commit optimization. Basically this is something that is used to allow a *single* resource that is only one-phase aware to be enlisted with a transaction that is usually two-phase. The way it works is: (i) the coordinator runs its normal first (prepare) phase on all two-phase aware participants and makes a decision based solely on their responses as to whether to commit or roll back. Note, the one-phase aware resource essentially returns voteCommit during prepare, to ensure that the second phase runs even if all other resources return voteReadOnly. (ii) if the transaction is to commit then the coordinator invokes the second phase on *all* participants, starting with the one that is only one-phase aware. If it rolls back, it rolls all resources back, but the order is not important.
Since:
ATS 3.2.
Version:
$Id: LastResourceRecord.java 2342 2006-03-30 13:06:17Z $
Author:
Mark Little (mark@arjuna.com)
  • Constructor Details

    • LastResourceRecord

      public LastResourceRecord(OnePhaseResource opr)
    • LastResourceRecord

      public LastResourceRecord()
  • Method Details

    • propagateOnCommit

      public boolean propagateOnCommit()
      Description copied from class: AbstractRecord
      Determine if records are discarded on action commit or must be propagated to parents.
      Overrides:
      propagateOnCommit in class AbstractRecord
      Returns:
      true if the record should be propagated to the parent transaction if the current transaction commits, false otherwise. The default is true.
    • typeIs

      public int typeIs()
      Specified by:
      typeIs in class AbstractRecord
      Returns:
      RecordType value.
    • nestedAbort

      public int nestedAbort()
      Description copied from class: AbstractRecord
      A rollback of a nested transaction has occurred.
      Specified by:
      nestedAbort in class AbstractRecord
      Returns:
      TwoPhaseOutcome to indicate success/failure.
      See Also:
    • nestedCommit

      public int nestedCommit()
      Description copied from class: AbstractRecord
      A commit of a nested transaction has occurred.
      Specified by:
      nestedCommit in class AbstractRecord
      Returns:
      TwoPhaseOutcome to indicate success/failure.
      See Also:
    • nestedPrepare

      public int nestedPrepare()
      Not allowed to participate in nested transactions.
      Specified by:
      nestedPrepare in class AbstractRecord
      Returns:
      TwoPhaseOutcome to indicate success/failure.
      See Also:
    • topLevelAbort

      public int topLevelAbort()
      Description copied from class: AbstractRecord
      A rollback of a top-level transaction has occurred.
      Specified by:
      topLevelAbort in class AbstractRecord
      Returns:
      TwoPhaseOutcome to indicate success/failure.
      See Also:
    • topLevelCommit

      public int topLevelCommit()
      Description copied from class: AbstractRecord
      A commit of a top-level transaction has occurred.
      Specified by:
      topLevelCommit in class AbstractRecord
      Returns:
      TwoPhaseOutcome to indicate success/failure.
      See Also:
    • topLevelPrepare

      public int topLevelPrepare()
      Description copied from class: AbstractRecord
      A prepare for a top-level transaction has occurred.
      Specified by:
      topLevelPrepare in class AbstractRecord
      Returns:
      TwoPhaseOutcome to indicate success/failure.
      See Also:
    • topLevelOnePhaseCommit

      public int topLevelOnePhaseCommit()
      Description copied from class: AbstractRecord
      Perform a top-level one phase commit.
      Overrides:
      topLevelOnePhaseCommit in class AbstractRecord
      Returns:
      TwoPhaseOutcome to indicate success/failure.
      See Also:
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • print

      public void print(PrintWriter strm)
      Description copied from class: AbstractRecord
      Write information about this specific instance to the specified stream.
      Overrides:
      print in class AbstractRecord
      Parameters:
      strm - the stream on which to output.
    • type

      public String type()
      Description copied from class: AbstractRecord
      Re-implementation of abstract methods inherited from base class.
      Overrides:
      type in class AbstractRecord
    • shouldAdd

      public boolean shouldAdd(AbstractRecord a)
      Description copied from class: AbstractRecord
      Should we add the record presented to the intentions list?
      Specified by:
      shouldAdd in class AbstractRecord
      Parameters:
      a - The record to try to add.
      Returns:
      true if the record should be added, false otherwise.
    • shouldMerge

      public boolean shouldMerge(AbstractRecord a)
      Description copied from class: AbstractRecord
      Should we merge the current record with the one presented?
      Specified by:
      shouldMerge in class AbstractRecord
      Parameters:
      a - The record to try to merge.
      Returns:
      true if the record should be merged, false otherwise.
    • shouldReplace

      public boolean shouldReplace(AbstractRecord a)
      Description copied from class: AbstractRecord
      Should we replace the record presented with the current record?
      Specified by:
      shouldReplace in class AbstractRecord
      Parameters:
      a - The record to try to replace.
      Returns:
      true if the record should be replaced, false otherwise.
    • shouldAlter

      public boolean shouldAlter(AbstractRecord a)
      Description copied from class: AbstractRecord
      Should we alter the current record with the one presented?
      Specified by:
      shouldAlter in class AbstractRecord
      Parameters:
      a - The record to try to alter.
      Returns:
      true if the record should be altered, false otherwise.
    • merge

      public void merge(AbstractRecord a)
      Description copied from class: AbstractRecord
      Merge the current record with the one presented.
      Specified by:
      merge in class AbstractRecord
      Parameters:
      a - the record with which to merge.
    • alter

      public void alter(AbstractRecord a)
      Description copied from class: AbstractRecord
      Alter the current record with the one presented.
      Specified by:
      alter in class AbstractRecord
      Parameters:
      a - the record with which to alter.
    • value

      public Object value()
      Description copied from class: AbstractRecord
      If this abstract record caused a heuristic then it should return an object which implements HeuristicInformation
      Specified by:
      value in class AbstractRecord
      Returns:
      Object to be used to order.
    • setValue

      public void setValue(Object o)
      Specified by:
      setValue in class AbstractRecord
    • setOutcome

      public void setOutcome(int outcome)