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