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
- Read the wrapped SystemException and TM logs; fix the TM-level failure first
- Verify the JtaPlatform and JNDI wiring point at the container's live TransactionManager
- 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
- Smoke-test the TransactionManager at startup
- Verify JtaPlatform JNDI configuration against the actual container
- Alert on repeated SystemException from the TM before it becomes an outage
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
- JTA UserTransaction.getStatus() failed
- Could not obtain TransactionManager from JtaPlatform
- Problem locating/validating JTA transaction
- UserTransaction reported transaction status as unknown
- Could not determine transaction status
AI-assisted analysis of hibernate/hibernate-orm@fad1729dce (2026-08-22).
Data as JSON: /api/errors/6412f558665e8d48.
Report an issue: GitHub.