flowable/flowable-engine · error · TransactionException

Unable to suspend transaction

Error message

Unable to suspend transaction

What it means

Infrastructure failure in JtaTransactionInterceptor.doSuspend: transactionManager.suspend() threw a SystemException while the interceptor tried to suspend the current transaction around command execution. Wrapped as TransactionException; points at JTA-level trouble rather than application logic.

Solutions

  1. Check transaction manager state and server logs for the underlying SystemException
  2. Avoid requiresNew propagation when the transaction manager cannot suspend
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:103 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/da0deaccfedd2e83. Report an issue: GitHub.

Appendix: source

Thrown at modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/interceptor/JtaTransactionInterceptor.java:103

            transactionManager.begin();
        } catch (NotSupportedException | SystemException e) {
            throw new TransactionException("Unable to begin transaction", e);
        }
    }

    private boolean isExisting() {
        try {
            return transactionManager.getStatus() != Status.STATUS_NO_TRANSACTION;
        } catch (SystemException e) {
            throw new TransactionException("Unable to retrieve transaction status", e);
        }
    }

    private Transaction doSuspend() {
        try {
            return transactionManager.suspend();
        } catch (SystemException e) {
            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);

View on GitHub (pinned to d6d39ce1c6)