in geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/RecoveryImpl.java [155:187]
private void doCommitOrRollback(NamedXAResource xaResource, Xid xid, boolean commit) {
try {
if (commit) {
xaResource.commit(xid, false);
} else {
xaResource.rollback(xid);
}
} catch (XAException e) {
try {
if (e.errorCode == XAException.XA_HEURRB) {
log.info("Transaction has been heuristically rolled back");
xaResource.forget(xid);
} else if (e.errorCode == XAException.XA_HEURMIX) {
log.info("Transaction has been heuristically committed and rolled back");
xaResource.forget(xid);
} else if (e.errorCode == XAException.XA_HEURCOM) {
log.info("Transaction has been heuristically committed");
xaResource.forget(xid);
} else {
recoveryErrors.add(e);
log.log(Level.SEVERE, "Could not roll back", e);
}
} catch (XAException e2) {
if (e2.errorCode == XAException.XAER_NOTA) {
// NOTA in response to forget, means the resource already forgot the transaction
// ignore
} else {
recoveryErrors.add(e);
log.log(Level.SEVERE, "Could not roll back", e);
}
}
}
}