hibernate/hibernate-orm · error · TransactionException

JTA TransactionManager#getStatus failed

Error message

JTA TransactionManager#getStatus failed

What it means

TransactionManager.getStatus() itself threw SystemException, which the adapter wraps as 'JTA TransactionManager#getStatus failed'. Hibernate cannot determine transaction state at all in this case; it is nearly always a symptom of a broken, stopped or corrupt TransactionManager rather than of a specific transaction. Reached from any Transaction API path that reads status (begin()'s NOT_ACTIVE check, getStatus()).

Source

Thrown at hibernate-core/src/main/java/org/hibernate/resource/transaction/backend/jta/internal/JtaTransactionAdapterTransactionManagerImpl.java:96

			}
		}
		catch (Exception e) {
			throw new TransactionException( "JTA TransactionManager.rollback() failed", e );
		}
	}

	@Override
	@Nonnull
	public TransactionStatus getStatus() {
		try {
			final var status = StatusTranslator.translate( transactionManager.getStatus() );
			if ( status == null ) {
				throw new TransactionException( "TransactionManager reported transaction status as unknown" );
			}
			return status;
		}
		catch (SystemException e) {
			throw new TransactionException( "JTA TransactionManager#getStatus failed", e );
		}
	}

	@Override
	public void markRollbackOnly() {
		try {
			transactionManager.setRollbackOnly();
		}
		catch (SystemException e) {
			throw new TransactionException( "Could not set transaction to rollback only", e );
		}
	}

	@Override
	public void setTimeOut(int seconds) {
		if ( seconds > 0 ) {
			try {
				transactionManager.setTransactionTimeout( seconds );

View on GitHub (pinned to fad1729dce)

Solutions

  1. Read the wrapped SystemException and TM logs; fix the TM-level failure first
  2. Verify the JtaPlatform and JNDI wiring point at the container's live TransactionManager
  3. Restart or recover the TM/application when it is in a terminal state
Defensive patterns

Strategy: try-catch

Validate before calling

// Health-check the TM before relying on transactions
try {
    transactionManager.getStatus();
}
catch (SystemException e) {
    throw new IllegalStateException("TransactionManager is not usable", e);
}

Try / catch

catch (TransactionException e) {
    if ( e.getCause() instanceof SystemException ) {
        // TM-level failure: fail the request and surface environment health
    }
}

Prevention

When it happens

Trigger: Any Transaction call that reads status - begin(), getStatus(), the rollback/markRollbackOnly guards - while the TM throws SystemException from getStatus(): TM shut down, JtaPlatform resolving a dead JNDI resource, or TM corruption after a crash.

Common situations: TM stopped or failed; wrong JNDI lookup name in the JtaPlatform; severe resource exhaustion or TM store corruption.

Related errors


AI-assisted analysis of hibernate/hibernate-orm@fad1729dce (2026-08-22). Data as JSON: /api/errors/6412f558665e8d48. Report an issue: GitHub.