Internal Timeout Handling in the TransactionContext is not XA Spec. conform
---------------------------------------------------------------------------
Key: JCR-2861
URL: https://issues.apache.org/jira/browse/JCR-2861
Project: Jackrabbit Content Repository
Issue Type: Improvement
Components: jackrabbit-core
Affects Versions: 2.2.0
Reporter: Claus Köll
Assignee: Claus Köll
Priority: Critical
The problem here is that in a 2 phase transaction the xa spec does not
permit a RB* return code in response to xa_commit(). The xa spec says
the following about RB* return codes in the xa_commit() section:
"The resource manager did not commit the work done on behalf of the
transaction branch. Upon return, the resource manager has rolled back
the branch?s work and has released all held resources. These values may
be returned only if TMONEPHASE is set in flags"
Essentially, the only two return codes from xa_commit that J2EE Containers can
handle sensibly are XA_OK (normal case) and XA_RMFAIL. RMFAIL will
cause the containers to retry to commit the transaction. Any other return
code will result in a heuristic
transaction outcome (non-atomic).
In a xa environment the TMONEPHASE is not set on the flags and so XA_RBTIMEOUT
is
not a permitted return code. A Container transaction service cannot do
anything to ensure an atomic
outcome if an XAResource fails to honour its promise to be able to commit it
made when it answer XA_OK in response to xa_prepare().
The internal timeout handling will rollback the Jackrabbit XAResource if the
time exceeds between prepare and commit.
and in the commit Method will always throw a XA_RBTIMEOUT.
We should not handle the timeout internal because this should make the
container in a 2 Phase transaction.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.