flowable/flowable-engine · error · TransactionException

Unable to retrieve transaction status

Error message

Unable to retrieve transaction status

What it means

Infrastructure failure in JtaTransactionInterceptor.isExisting: the JTA TransactionManager.getStatus() call threw a SystemException, so the interceptor cannot determine whether a transaction is active and wraps the failure in a TransactionException. Indicates a JTA/environment problem (transaction manager timeout, recovery issue), not bad input.

Solutions

  1. Verify the TransactionManager JNDI/bean configuration
  2. Look at the cause SystemException for server-side transaction failures
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:95 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/a0728a27857fe635. Report an issue: GitHub.

Appendix: source

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

            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);
        }
    }

    private void doResume(Transaction tx) {
        if (tx != null) {
            try {
                transactionManager.resume(tx);
            } catch (SystemException | InvalidTransactionException e) {
                throw new TransactionException("Unable to resume transaction", e);
            }

View on GitHub (pinned to d6d39ce1c6)