diff --git a/extensions/narayana-jta/runtime/src/main/java/io/quarkus/narayana/jta/runtime/interceptor/TransactionalInterceptorBase.java b/extensions/narayana-jta/runtime/src/main/java/io/quarkus/narayana/jta/runtime/interceptor/TransactionalInterceptorBase.java index ba67fde04a12a..24b599c3e6e32 100644 --- a/extensions/narayana-jta/runtime/src/main/java/io/quarkus/narayana/jta/runtime/interceptor/TransactionalInterceptorBase.java +++ b/extensions/narayana-jta/runtime/src/main/java/io/quarkus/narayana/jta/runtime/interceptor/TransactionalInterceptorBase.java @@ -301,17 +301,19 @@ protected void handleException(InvocationContext ic, Exception e, Transaction tx protected void endTransaction(TransactionManager tm, Transaction tx, RunnableWithException afterEndTransaction) throws Exception { - if (tx != tm.getTransaction()) { - throw new RuntimeException(jtaLogger.i18NLogger.get_wrong_tx_on_thread()); - } + try { + if (tx != tm.getTransaction()) { + throw new RuntimeException(jtaLogger.i18NLogger.get_wrong_tx_on_thread()); + } - if (tx.getStatus() == Status.STATUS_MARKED_ROLLBACK) { - tm.rollback(); - } else { - tm.commit(); + if (tx.getStatus() == Status.STATUS_MARKED_ROLLBACK) { + tm.rollback(); + } else { + tm.commit(); + } + } finally { + afterEndTransaction.run(); } - - afterEndTransaction.run(); } protected boolean setUserTransactionAvailable(boolean available) {