Skip to content

Commit 9cff07c

Browse files
mp911dejhoeller
authored andcommitted
Fix doCleanupAfterCompletion invocation
doCleanupAfterCompletion gets now subscribed to when processing cleanup after a new transaction.
1 parent ec8689d commit 9cff07c

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

spring-tx/src/main/java/org/springframework/transaction/reactive/AbstractReactiveTransactionManager.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -676,17 +676,18 @@ private Mono<Void> cleanupAfterCompletion(TransactionSynchronizationManager sync
676676
if (status.isNewSynchronization()) {
677677
synchronizationManager.clear();
678678
}
679+
Mono<Void> cleanup = Mono.empty();
679680
if (status.isNewTransaction()) {
680-
doCleanupAfterCompletion(synchronizationManager, status.getTransaction());
681+
cleanup = doCleanupAfterCompletion(synchronizationManager, status.getTransaction());
681682
}
682683
if (status.getSuspendedResources() != null) {
683684
if (status.isDebug()) {
684685
logger.debug("Resuming suspended transaction after completion of inner transaction");
685686
}
686687
Object transaction = (status.hasTransaction() ? status.getTransaction() : null);
687-
return resume(synchronizationManager, transaction, (SuspendedResourcesHolder) status.getSuspendedResources());
688+
return cleanup.then(resume(synchronizationManager, transaction, (SuspendedResourcesHolder) status.getSuspendedResources()));
688689
}
689-
return Mono.empty();
690+
return cleanup;
690691
});
691692
}
692693

spring-tx/src/test/java/org/springframework/transaction/reactive/ReactiveTestTransactionManager.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ class ReactiveTestTransactionManager extends AbstractReactiveTransactionManager
4444

4545
protected boolean rollbackOnly = false;
4646

47+
protected boolean cleanup = false;
48+
4749

4850
ReactiveTestTransactionManager(boolean existingTransaction, boolean canCreateTransaction) {
4951
this.existingTransaction = existingTransaction;
@@ -96,4 +98,8 @@ protected Mono<Void> doSetRollbackOnly(TransactionSynchronizationManager synchro
9698
return Mono.fromRunnable(() -> this.rollbackOnly = true);
9799
}
98100

101+
@Override
102+
protected Mono<Void> doCleanupAfterCompletion(TransactionSynchronizationManager synchronizationManager, Object transaction) {
103+
return Mono.fromRunnable(() -> this.cleanup = true);
104+
}
99105
}

spring-tx/src/test/java/org/springframework/transaction/reactive/ReactiveTransactionSupportTests.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ public void commitWithoutExistingTransaction() {
9595
assertHasCommitted(tm);
9696
assertHasNoRollback(tm);
9797
assertHasNotSetRollbackOnly(tm);
98+
assertHasCleanedUp(tm);
9899
}
99100

100101
@Test
@@ -108,6 +109,7 @@ public void rollbackWithoutExistingTransaction() {
108109
assertHasNotCommitted(tm);
109110
assertHasRolledBack(tm);
110111
assertHasNotSetRollbackOnly(tm);
112+
assertHasCleanedUp(tm);
111113
}
112114

113115
@Test
@@ -122,6 +124,7 @@ public void rollbackOnlyWithoutExistingTransaction() {
122124
assertHasNotCommitted(tm);
123125
assertHasRolledBack(tm);
124126
assertHasNotSetRollbackOnly(tm);
127+
assertHasCleanedUp(tm);
125128
}
126129

127130
@Test
@@ -135,6 +138,7 @@ public void commitWithExistingTransaction() {
135138
assertHasNotCommitted(tm);
136139
assertHasNoRollback(tm);
137140
assertHasNotSetRollbackOnly(tm);
141+
assertHasNotCleanedUp(tm);
138142
}
139143

140144
@Test
@@ -148,6 +152,7 @@ public void rollbackWithExistingTransaction() {
148152
assertHasNotCommitted(tm);
149153
assertHasNoRollback(tm);
150154
assertHasSetRollbackOnly(tm);
155+
assertHasNotCleanedUp(tm);
151156
}
152157

153158
@Test
@@ -161,6 +166,7 @@ public void rollbackOnlyWithExistingTransaction() {
161166
assertHasNotCommitted(tm);
162167
assertHasNoRollback(tm);
163168
assertHasSetRollbackOnly(tm);
169+
assertHasNotCleanedUp(tm);
164170
}
165171

166172
@Test
@@ -177,6 +183,7 @@ public void transactionTemplate() {
177183
assertHasCommitted(tm);
178184
assertHasNoRollback(tm);
179185
assertHasNotSetRollbackOnly(tm);
186+
assertHasCleanedUp(tm);
180187
}
181188

182189
@Test
@@ -194,6 +201,7 @@ public void transactionTemplateWithException() {
194201
assertHasNotCommitted(tm);
195202
assertHasRolledBack(tm);
196203
assertHasNotSetRollbackOnly(tm);
204+
assertHasCleanedUp(tm);
197205
}
198206

199207
private void assertHasBegan(ReactiveTestTransactionManager actual) {
@@ -228,4 +236,12 @@ private void assertHasNotSetRollbackOnly(ReactiveTestTransactionManager actual)
228236
assertFalse("Expected to not call <ReactiveTransactionManager.setRollbackOnly()> but was <setRollbackOnly()> was called", actual.rollbackOnly);
229237
}
230238

239+
private void assertHasCleanedUp(ReactiveTestTransactionManager actual) {
240+
assertTrue("Expected <ReactiveTransactionManager.doCleanupAfterCompletion()> but was <doCleanupAfterCompletion()> was not invoked", actual.cleanup);
241+
}
242+
243+
private void assertHasNotCleanedUp(ReactiveTestTransactionManager actual) {
244+
assertFalse("Expected to not call <ReactiveTransactionManager.doCleanupAfterCompletion()> but was <doCleanupAfterCompletion()> was called", actual.cleanup);
245+
}
246+
231247
}

0 commit comments

Comments
 (0)