== TransactionConstants

.TransactionConstants
[cols="2,1,6", options="header"]
|===============
|Name|Value|Description

|ABORTED|0|
  The participant is not prepared. Transaction should be aborted.
|PREPARED|1|
  The participant is prepared to commit the transaction, provided
  all other participants down the list return PREPARED too.
|RETRY|2|
  The transaction will be retried after a short period of time
  defined by the +retry-timeout+ TransactionManager
  property (which defaults to 5 seconds).  
  This can be used in situations where a transient error has been 
  detected (such as a link down situation or a transient database issue).
|PAUSE|4
a|
The transaction will be paused and will be resumed
in the following situations:

a) Some external thread calls +resume+ in the transaction's Context 
  (provided the Context implements the +Pausable+ interface)

b) A timeout specified by the Context's Pausable interface occurs

c) A default timeout specified by the TransactionManager's +pause-timeout+ property 
  (which defaults to five minutes)

|NO_JOIN|0x40|
  This modifier is a hint to the TransactionManager to let it know
  that it is not required to call this participant's
  +commit+ or +abort+ methods once the committing or aborting 
  phase of the transaction is reached.
|READONLY|0x80|
  This modifier is a hint to the TransactionManager to let it know
  that this participant has not modified any persistent information
  in the context, so saving a snapshot of the context is not required.
|FAIL|0xC0|
  Handy constant equals to `ABORTED \| READONLY \| NO_JOIN`
|===============

[NOTE]
======
Despite the fact that a participant may indicate that it doesn't want to
JOIN a given transaction (by using the +NO_JOIN+ run-time modifier), 
under certain recovery situations the TransactionManager
may still call its +commit+ or +abort+ method, so the participant developer 
should be prepared to receive a +commit+ or +abort+ call for an
unknown transaction. The code should check the +long id+
and / or +Serializable context+ in order to figure out what to do. That
said, most participants returning +NO_JOIN+ actually have empty +commit()+
and +abort()+ callbacks.
======

