The LIXA project tries to be as compliant as possible with the X/Open CAE specifications cited in bibliography. Below there are the features that are not implemented and the features that are not implementable.
As explained in [TXspec] (3.4, 3.8.1) two values are available:
TX_COMMIT_COMPLETED
TX_COMMIT_DECISION_LOGGED
LIXA TX API implementation supports only
TX_COMMIT_COMPLETED
this behavior is allowed by the specification.
As explained in [TXspec] (4.2, page 16)
tx_info()
can return three values:
TX_ACTIVE
TX_TIMEOUT_ROLLBACK_ONLY
TX_ROLLBACK_ONLY
LIXA
tx_info()
does not return
TX_ROLLBACK_ONLY
. This does not hurt the
X/Open CAE specification.
In [TXspec] (Appendix B.4, page 64) it is suggested
to return the value TX_ERROR
when the Resource
Manager returns XA_RETRY
; this is explained in
“note 1”.
The LIXA implementation of
for tx_commit()
and
tx_rollback()
returns
TX_NO_BEGIN
instead of
TX_ERROR
because it seems a more useful
information for the Application Program: the transaction has been
successfully committed/rolled back, but a new transaction can not be
started
[6].
In [TXspec] (Appendix B.5, page 69) it is
explained XA_RETRY
is a valid return code for
function xa_rollback()
. Unfortunately
[XAspec] does not agree with this point of view: the
XA_RETRY
is not a valid return code for
function xa_rollback()
. It may be an error in
[TXspec]: the same row could have been copied from
the previous table (page 68).
[XA+spec] does not list
XA_RETRY
as a valid return code for
function xa_rollback()
; it lists
XA_RETRY_COMMFAIL
but it does not apply to LIXA
implementation because it is related to the
Communication Resource Manager concept that is
not supported by LIXA implementation.
The LIXA implementation sticks to [XAspec]: if a
resource manager returned XA_RETRY
it would be
considered a bug inside the resource manager.
[6] The X/Open CAE specification document
“suggests” the mapping and it seems there is some
flexibility in the suggestions. From a LIXA perspective all this
stuff is academic because TMNOWAIT
is not
used by LIXA implementation.