flowable/flowable-engine · error · TransactionException
Unable to commit transaction
Error message
Unable to commit transaction
What it means
Wrapper thrown by JtaTransactionInterceptor.doCommit: committing the JTA transaction failed with a rollback/heuristic exception (e.g. HeuristicMixedException, RollbackException), so the command's changes were not durably committed.
Solutions
- Inspect the cause to see whether a rollback or heuristic outcome occurred
- Resolve concurrent-update or timeout conditions that force the rollback
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/interceptor/JtaTransactionInterceptor.java:121 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/ab12fa6f348be92c.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/interceptor/JtaTransactionInterceptor.java:121
throw new TransactionException("Unable to suspend transaction", e);
}
}
private void doResume(Transaction tx) {
if (tx != null) {
try {
transactionManager.resume(tx);
} catch (SystemException | InvalidTransactionException e) {
throw new TransactionException("Unable to resume transaction", e);
}
}
}
private void doCommit() {
try {
transactionManager.commit();
} catch (HeuristicMixedException | SystemException | RollbackException | HeuristicRollbackException e) {
throw new TransactionException("Unable to commit transaction", e);
} catch (RuntimeException | Error e) {
doRollback(true, e);
throw e;
}
}
private void doRollback(boolean isNew, Throwable originalException) {
Throwable rollbackEx = null;
try {
if (isNew) {
transactionManager.rollback();
} else {
transactionManager.setRollbackOnly();
}
} catch (SystemException e) {
LOGGER.debug("Error when rolling back transaction", e);
} catch (RuntimeException | Error e) {
rollbackEx = e;View on GitHub (pinned to d6d39ce1c6)