From fcda419abb35bb4b6067791447518fa8df393ef2 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Thu, 21 Oct 2021 12:06:45 +1300 Subject: [PATCH] #2424 Preserve using PersistenceException when transaction register(Callback) called with no active transaction --- .../java/io/ebeaninternal/server/core/DefaultServer.java | 6 +++++- .../java/org/tests/transaction/TestTransactionCallback.java | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java index 3ad4f9539..8449e1172 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java @@ -691,7 +691,11 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public void register(TransactionCallback transactionCallback) { - currentTransaction().register(transactionCallback); + Transaction transaction = currentTransaction(); + if (transaction == null) { + throw new PersistenceException("Not currently active transaction when trying to register transactionCallback"); + } + transaction.register(transactionCallback); } /** diff --git a/ebean-test/src/test/java/org/tests/transaction/TestTransactionCallback.java b/ebean-test/src/test/java/org/tests/transaction/TestTransactionCallback.java index cce91acc0..3135fa42f 100644 --- a/ebean-test/src/test/java/org/tests/transaction/TestTransactionCallback.java +++ b/ebean-test/src/test/java/org/tests/transaction/TestTransactionCallback.java @@ -72,12 +72,12 @@ public class TestTransactionCallback extends BaseTestCase { @Test public void test_noActiveTransaction() { - assertThrows(NullPointerException.class, () -> DB.register(new MyCallback())); + assertThrows(PersistenceException.class, () -> DB.register(new MyCallback())); } @Test public void test_noActiveTransaction_withDatabase() { - assertThrows(NullPointerException.class, () -> DB.getDefault().register(new MyCallback())); + assertThrows(PersistenceException.class, () -> DB.getDefault().register(new MyCallback())); } class MyCallback extends TransactionCallbackAdapter {