Class XAResourceRecord
java.lang.Object
com.arjuna.ats.arjuna.StateManager
com.arjuna.ats.arjuna.coordinator.AbstractRecord
com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord
- All Implemented Interfaces:
ExceptionDeferrer
- Direct Known Subclasses:
XARecoveryResourceImple
- Since:
- JTS 1.2.4.
- Version:
- $Id: XAResourceRecord.java 2342 2006-03-30 13:06:17Z $
- Author:
- Mark Little (mark_little@hp.com)
-
Field Summary
Fields inherited from class com.arjuna.ats.arjuna.StateManager
modifyingActions, objectModel, objectUid, synchronizationLock, usingActions
-
Constructor Summary
ConstructorDescriptionXAResourceRecord
(TransactionImple tx, XAResource res, Xid xid, Object[] params) The params represent specific parameters we need to recreate the connection to the database in the event of a failure. -
Method Summary
Modifier and TypeMethodDescriptionvoid
Alter the current record with the one presented.void
Clearing the heuristic state on the resource.boolean
doSave()
Should this record be saved in the intentions list? If the record is saved, then it may be recovered later in the event of a failure.boolean
Forget any heuristic outcome which this implementation may have produced.void
getDeferredThrowables
(List<Throwable> list) Adds all supressed throwables of this ExceptionDeferrer to the given list in order of appearance.int
Returns the resource manager JNDI name for e.g.Returns the resource manager product name.Returns the resource manager product version.final Xid
getXid()
boolean
void
Merge the current record with the one presented.int
A rollback of a nested transaction has occurred.int
A commit of a nested transaction has occurred.int
Perform a nested one phase commit.int
A prepare for a nested transaction has occurred.protected boolean
notAProblem
(XAException ex, boolean commit) Is the XAException a non-error when received in reply to commit or rollback ? It normally is, but may be overridden in recovery.order()
Return the Uid of this abstract record so that it can be ordered in the intentions list.boolean
Determine if records are discarded on action commit or must be propagated to parents.protected int
recover()
Independant recovery cannot occur.boolean
restore_state
(InputObjectState os, int t) During recovery, the transaction log is given to the recovery system and it will recreate a transaction instance to perform necessary recovery actions.boolean
save_state
(OutputObjectState os, int t) When the transaction is required to make the intentions list persistent, it scans the list and asks each record whether or not it requires state to be saved (by calling doSave).void
setJndiName
(String jndiName) Sets the resource manager JNDI name.void
setProductName
(String productName) Sets the resource manager product name.void
setProductVersion
(String productVersion) Sets the resource manager product version.void
boolean
Should we add the record presented to the intentions list?boolean
Should we alter the current record with the one presented?boolean
Should we merge the current record with the one presented?boolean
Should we replace the record presented with the current record?int
A rollback of a top-level transaction has occurred.int
A commit of a top-level transaction has occurred.int
For commit_one_phase we can do whatever we want since the transaction outcome is whatever we want.int
A prepare for a top-level transaction has occurred.toString()
type()
Re-implementation of abstract methods inherited from base class.int
typeIs()
static String
typeName()
value()
If this abstract record caused a heuristic then it should return an object which implementsHeuristicInformation
Methods inherited from class com.arjuna.ats.arjuna.coordinator.AbstractRecord
create, equals, getNext, getPrevious, getTypeOfObject, greaterThan, isPermittedTopLevelOnePhaseCommit, lessThan, nestedCleanup, print, propagateOnAbort, replace, setNext, setPrevious, topLevelCleanup
Methods inherited from class com.arjuna.ats.arjuna.StateManager
activate, activate, cleanup, createLists, deactivate, deactivate, deactivate, destroy, disable, forgetAction, get_uid, getCreationTimeMillis, getMutex, getObjectModel, getStore, getStoreRoot, loadObjectState, lockMutex, modified, objectType, packHeader, persist, rememberAction, setStatus, setupStore, setupStore, setupStore, status, terminate, tryLockMutex, unlockMutex, unpackHeader
-
Field Details
-
XACONNECTION
public static final int XACONNECTION- See Also:
-
_theXAResource
-
-
Constructor Details
-
XAResourceRecord
public XAResourceRecord() -
XAResourceRecord
-
XAResourceRecord
The params represent specific parameters we need to recreate the connection to the database in the event of a failure. If they're not set then recovery is out of our control.Could also use it to pass other information, such as the readonly flag.
-
-
Method Details
-
getXid
-
order
Description copied from class:AbstractRecord
Return the Uid of this abstract record so that it can be ordered in the intentions list. This is also the Uid that the record was saved with in the object store.- Overrides:
order
in classAbstractRecord
- Returns:
Uid
for this instance.- See Also:
-
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 classAbstractRecord
- Returns:
true
if the record should be propagated to the parent transaction if the current transaction commits,false
otherwise. The default istrue
.
-
typeIs
public int typeIs()- Specified by:
typeIs
in classAbstractRecord
- Returns:
RecordType
value.
-
value
Description copied from class:AbstractRecord
If this abstract record caused a heuristic then it should return an object which implementsHeuristicInformation
- Specified by:
value
in classAbstractRecord
- Returns:
Object
to be used to order.
-
setValue
- Specified by:
setValue
in classAbstractRecord
-
nestedAbort
public int nestedAbort()Description copied from class:AbstractRecord
A rollback of a nested transaction has occurred.- Specified by:
nestedAbort
in classAbstractRecord
- 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 classAbstractRecord
- Returns:
TwoPhaseOutcome
to indicate success/failure.- See Also:
-
nestedPrepare
public int nestedPrepare()Description copied from class:AbstractRecord
A prepare for a nested transaction has occurred.- Specified by:
nestedPrepare
in classAbstractRecord
- 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 classAbstractRecord
- 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 classAbstractRecord
- 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 classAbstractRecord
- Returns:
TwoPhaseOutcome
to indicate success/failure.- See Also:
-
notAProblem
Is the XAException a non-error when received in reply to commit or rollback ? It normally is, but may be overridden in recovery. -
nestedOnePhaseCommit
public int nestedOnePhaseCommit()Description copied from class:AbstractRecord
Perform a nested one phase commit.- Overrides:
nestedOnePhaseCommit
in classAbstractRecord
- Returns:
TwoPhaseOutcome
to indicate success/failure.- See Also:
-
topLevelOnePhaseCommit
public int topLevelOnePhaseCommit()For commit_one_phase we can do whatever we want since the transaction outcome is whatever we want. Therefore, we do not need to save any additional recoverable state, such as a reference to the transaction coordinator, since it will not have an intentions list anyway.- Overrides:
topLevelOnePhaseCommit
in classAbstractRecord
- Returns:
TwoPhaseOutcome
to indicate success/failure.- See Also:
-
clearHeuristicDecision
public void clearHeuristicDecision()Description copied from class:AbstractRecord
Clearing the heuristic state on the resource. If the resource maintains a state of the prior heuristic outcome then it should use this method to clear the state and forget the heuristic.- Overrides:
clearHeuristicDecision
in classAbstractRecord
-
forgetHeuristic
public boolean forgetHeuristic()Description copied from class:AbstractRecord
Forget any heuristic outcome which this implementation may have produced.- Overrides:
forgetHeuristic
in classAbstractRecord
- Returns:
true
by default. Iffalse
is returned then the instance must be remembered by the transaction (in the log) in order for recovery to retry later or for a system administrator to be able to determine which resources have not been successfully completed.
-
recover
protected int recover()Independant recovery cannot occur. Must be driven by the recovery of the local transaction, i.e., top-down recovery. -
save_state
Description copied from class:AbstractRecord
When the transaction is required to make the intentions list persistent, it scans the list and asks each record whether or not it requires state to be saved (by calling doSave). If the answer is yes, then save_state is called and the record instance must save enough information to enable it to be restored from that state later. The basic AbstractRecord save_state will save common data that is required by the base class during recovery. If a derived class calls super.save_state then it must be called before packing any other data item.- Overrides:
save_state
in classAbstractRecord
- Returns:
true
if successful,false
otherwise.
-
restore_state
Description copied from class:AbstractRecord
During recovery, the transaction log is given to the recovery system and it will recreate a transaction instance to perform necessary recovery actions. This transaction will recreate the intentions list and give each recreated AbstractRecord the state that that was saved during transaction persistence. The base class will restore information that it needs from the log. Data items must be unpacked in the same order that they were packed.- Overrides:
restore_state
in classAbstractRecord
- Returns:
true
if successful,false
otherwise.
-
type
Description copied from class:AbstractRecord
Re-implementation of abstract methods inherited from base class.- Overrides:
type
in classAbstractRecord
-
typeName
-
doSave
public boolean doSave()Description copied from class:AbstractRecord
Should this record be saved in the intentions list? If the record is saved, then it may be recovered later in the event of a failure. Note, however, that the size of the intentions list on disk is critical to the performance of the system (disk I/O is a bottleneck).- Overrides:
doSave
in classAbstractRecord
- Returns:
true
if it should be saved,false
otherwise.false
is the default.
-
merge
Description copied from class:AbstractRecord
Merge the current record with the one presented.- Specified by:
merge
in classAbstractRecord
- Parameters:
a
- the record with which to merge.
-
alter
Description copied from class:AbstractRecord
Alter the current record with the one presented.- Specified by:
alter
in classAbstractRecord
- Parameters:
a
- the record with which to alter.
-
shouldAdd
Description copied from class:AbstractRecord
Should we add the record presented to the intentions list?- Specified by:
shouldAdd
in classAbstractRecord
- Parameters:
a
- The record to try to add.- Returns:
true
if the record should be added,false
otherwise.
-
shouldAlter
Description copied from class:AbstractRecord
Should we alter the current record with the one presented?- Specified by:
shouldAlter
in classAbstractRecord
- Parameters:
a
- The record to try to alter.- Returns:
true
if the record should be altered,false
otherwise.
-
shouldMerge
Description copied from class:AbstractRecord
Should we merge the current record with the one presented?- Specified by:
shouldMerge
in classAbstractRecord
- Parameters:
a
- The record to try to merge.- Returns:
true
if the record should be merged,false
otherwise.
-
shouldReplace
Description copied from class:AbstractRecord
Should we replace the record presented with the current record?- Specified by:
shouldReplace
in classAbstractRecord
- Parameters:
a
- The record to try to replace.- Returns:
true
if the record should be replaced,false
otherwise.
-
getProductName
Returns the resource manager product name.- Returns:
- the product name
-
setProductName
Sets the resource manager product name.- Parameters:
productName
- the product name
-
getProductVersion
Returns the resource manager product version.- Returns:
- the product version
-
setProductVersion
Sets the resource manager product version.- Parameters:
productVersion
- the product version
-
getJndiName
Returns the resource manager JNDI name for e.g. xa datasource. Note this is not used for lookup, only for information.- Returns:
- the JNDI name.
-
setJndiName
Sets the resource manager JNDI name. Note this is not used for lookup, only for information.- Parameters:
jndiName
- the JNDI name.
-
toString
-
getHeuristic
public int getHeuristic() -
isForgotten
public boolean isForgotten() -
getDeferredThrowables
Description copied from interface:ExceptionDeferrer
Adds all supressed throwables of this ExceptionDeferrer to the given list in order of appearance.- Specified by:
getDeferredThrowables
in interfaceExceptionDeferrer
- Parameters:
list
-
-