in tx-control-services/tx-control-service-xa/src/main/java/org/apache/aries/tx/control/service/xa/impl/TransactionContextImpl.java [351:388]
private void doCommit() throws XAException {
AtomicBoolean commit = new AtomicBoolean(true);
List<LocalResource> committed = new ArrayList<>(resources.size());
List<LocalResource> rolledback = new ArrayList<>(0);
resources.stream().forEach(lr -> {
try {
if (commit.get()) {
lr.commit();
committed.add(lr);
} else {
lr.rollback();
rolledback.add(lr);
}
} catch (Exception e) {
recordFailure(e);
if (committed.isEmpty()) {
commit.set(false);
// This is needed to override the status from the
// Transaction, which thinks that we're committing
// until we throw an XAException from this commit.
completionState.set(ROLLING_BACK);
}
rolledback.add(lr);
}
});
if(!rolledback.isEmpty()) {
if(committed.isEmpty()) {
throw (XAException) new XAException(XA_RBOTHER)
.initCause(firstUnexpectedException.get());
} else {
throw (XAException) new XAException(XA_HEURMIX)
.initCause(firstUnexpectedException.get());
}
}
}