From 4b2976e31baa98131211277a0a19a454f6e1d6b7 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Wed, 3 May 2023 10:59:21 +0200 Subject: [PATCH] Rethrow error in commit path of callbacks --- .../server/transaction/JdbcTransaction.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JdbcTransaction.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JdbcTransaction.java index 92c2efb4a..aa8a3b357 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JdbcTransaction.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JdbcTransaction.java @@ -190,7 +190,6 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { } - @Override public final void setAutoPersistUpdates(boolean autoPersistUpdates) { this.autoPersistUpdates = autoPersistUpdates; @@ -251,7 +250,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { callbackList.add(callback); } - private void withEachCallback(Consumer consumer) { + private void withEachCallbackFailSilent(Consumer consumer) { if (callbackList != null) { // using old style loop to cater for case when new callbacks are added recursively (as otherwise iterator fails fast) for (int i = 0; i < callbackList.size(); i++) { @@ -259,17 +258,27 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { consumer.accept(callbackList.get(i)); } catch (Exception e) { log.log(ERROR, "Error executing transaction callback", e); + throw wrapIfNeeded(e); } } } } + private void withEachCallback(Consumer consumer) { + if (callbackList != null) { + // using old style loop to cater for case when new callbacks are added recursively (as otherwise iterator fails fast) + for (int i = 0; i < callbackList.size(); i++) { + consumer.accept(callbackList.get(i)); + } + } + } + private void firePreRollback() { - withEachCallback(TransactionCallback::preRollback); + withEachCallbackFailSilent(TransactionCallback::preRollback); } private void firePostRollback() { - withEachCallback(TransactionCallback::postRollback); + withEachCallbackFailSilent(TransactionCallback::postRollback); if (changeLogHolder != null) { changeLogHolder.postRollback(); }