普元EOS中的事务是在spring 基础上封装的,当在分布式环境JTA事务环境下,spring 中的setRollbackOnly只能做本地的回滚标记,无法做全局回滚标记
此时需要自己写代码来实现全局的事务回滚。
if
(status.getTransaction()
instanceof
JtaTransactionObject) {
JtaTransactionObject txObject = (JtaTransactionObject) status
.getTransaction();
try
{
if
(txObject.getUserTransaction().getStatus() \!= javax.transaction.Status.STATUS_NO_TRANSACTION) {
txObject.getUserTransaction().setRollbackOnly();
}
}
catch
(IllegalStateException ex) {
throw
new
NoTransactionException(
"No active JTA transaction"
);
}
catch
(SystemException ex) {
throw
new
TransactionSystemException(
"JTA failure on setRollbackOnly"
, ex);
}
}
else
{
status.setRollbackOnly();
}
|