flowable/flowable-engine · error · TransactionException

Unable to begin transaction

Error message

Unable to begin transaction

What it means

Wrapper thrown by JtaTransactionInterceptor.doBegin: transactionManager.begin() failed with NotSupportedException or SystemException (transaction manager unavailable or nesting not supported), so the JTA transaction for the command could not be started.

Solutions

  1. Check JTA transaction manager configuration and availability
  2. Avoid unsupported nested transaction usage; use requiresNew appropriately
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:87 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/3161c2e5920196e2. Report an issue: GitHub.

Appendix: source

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

                throw ex;
            } catch (Exception ex) {
                doRollback(isNew, ex);
                throw new UndeclaredThrowableException(ex, "TransactionCallback threw undeclared checked exception");
            }
            if (isNew) {
                doCommit();
            }
            return result;
        } finally {
            doResume(oldTx);
        }
    }

    private void doBegin() {
        try {
            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);
        }
    }

View on GitHub (pinned to d6d39ce1c6)