安德烈亚斯已经有了答案。我只想为像我这样的人添加一些细节,他们可能认为 STATUS_NO_TRANSACTION 不是已完成事务的直观状态,因为我们在列表中也有一个 STATUS_COMMITTED。
这里是一个事务可以拥有的所有状态as listed in EE6 javadoc;
STATUS_ACTIVE 0
STATUS_COMMITTED 3
STATUS_COMMITTING 8
STATUS_MARKED_ROLLBACK 1
STATUS_NO_TRANSACTION 6
STATUS_PREPARED 2
STATUS_PREPARING 7
STATUS_ROLLEDBACK 4
STATUS_ROLLING_BACK 9
STATUS_UNKNOWN 5
在 javadocs 上,它明确指出我们将在事务完成(提交或回滚)后获得 STATUS_NO_TRANSACTION
static final int STATUS_NO_TRANSACTION
No transaction is currently associated with the target object.
This will occur after a transaction has completed.
那么我们什么时候有 STATUS_ROLLEDBACK 和 STATUS_COMMITTED? Javadocs 与这两种状态类似,表明它们对应于某种有问题的状态,如果没有问题,您将获得 STATUS_NO_TRANSACTION;
static final int STATUS_COMMITTED
A transaction is associated with the target object and it has been committed.
It is likely that heuristics exist; otherwise, the transaction
would have been destroyed and NoTransaction returned.
启发式?
这是定义;
启发式完成(或启发式决策)发生在资源
在完成阶段做出单方面决定
分布式事务提交或回滚更新。这可以离开
处于不确定状态的分布式数据。网络故障或
资源超时是启发式完成的可能原因。
这意味着,简单地说,您的 XA 事务出现问题,可能是由于网络、超时等瞬态条件造成的。
很公平。
另外,值得注意的是,WebSphere 如何处理这些启发式完成可以通过Configuring transaction properties for an application server 中概述的启发式相关属性进行配置