11/*
2- * Copyright 2002-2024 the original author or authors.
2+ * Copyright 2002-2025 the original author or authors.
33 *
44 * Licensed under the Apache License, Version 2.0 (the "License");
55 * you may not use this file except in compliance with the License.
1616
1717package org .springframework .orm .jpa ;
1818
19- import java .util .ArrayList ;
2019import java .util .List ;
2120
2221import jakarta .persistence .EntityManager ;
4645import static org .mockito .Mockito .verify ;
4746
4847/**
48+ * Unit tests for {@link JpaTransactionManager}.
4949 * @author Costin Leau
5050 * @author Juergen Hoeller
5151 * @author Phillip Webb
5252 */
5353class JpaTransactionManagerTests {
5454
55- private EntityManagerFactory factory = mock ( );
55+ private static final List < String > testList = List . of ( "test" );
5656
57- private EntityManager manager = mock ();
5857
59- private EntityTransaction tx = mock ();
58+ private final EntityManagerFactory factory = mock ();
6059
61- private JpaTransactionManager tm = new JpaTransactionManager ( factory );
60+ private final EntityManager manager = mock ( );
6261
63- private TransactionTemplate tt = new TransactionTemplate (tm );
62+ private final EntityTransaction tx = mock ();
63+
64+ private final JpaTransactionManager tm = new JpaTransactionManager (factory );
65+
66+ private final TransactionTemplate tt = new TransactionTemplate (tm );
6467
6568
6669 @ BeforeEach
@@ -81,18 +84,15 @@ void verifyTransactionSynchronizationManagerState() {
8184
8285 @ Test
8386 void testTransactionCommit () {
84- final List <String > l = new ArrayList <>();
85- l .add ("test" );
86-
8787 assertThat (TransactionSynchronizationManager .hasResource (factory )).isFalse ();
8888 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isFalse ();
8989
9090 Object result = tt .execute (status -> {
9191 assertThat (TransactionSynchronizationManager .hasResource (factory )).isTrue ();
9292 EntityManagerFactoryUtils .getTransactionalEntityManager (factory ).flush ();
93- return l ;
93+ return testList ;
9494 });
95- assertThat (result ).isSameAs (l );
95+ assertThat (result ).isSameAs (testList );
9696
9797 assertThat (TransactionSynchronizationManager .hasResource (factory )).isFalse ();
9898 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isFalse ();
@@ -107,19 +107,16 @@ void testTransactionCommitWithRollbackException() {
107107 given (tx .getRollbackOnly ()).willReturn (true );
108108 willThrow (new RollbackException ()).given (tx ).commit ();
109109
110- final List <String > l = new ArrayList <>();
111- l .add ("test" );
112-
113110 assertThat (TransactionSynchronizationManager .hasResource (factory )).isFalse ();
114111 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isFalse ();
115112
116113 try {
117114 Object result = tt .execute (status -> {
118115 assertThat (TransactionSynchronizationManager .hasResource (factory )).isTrue ();
119116 EntityManagerFactoryUtils .getTransactionalEntityManager (factory ).flush ();
120- return l ;
117+ return testList ;
121118 });
122- assertThat (result ).isSameAs (l );
119+ assertThat (result ).isSameAs (testList );
123120 }
124121 catch (TransactionSystemException tse ) {
125122 // expected
@@ -137,9 +134,6 @@ void testTransactionCommitWithRollbackException() {
137134 void testTransactionRollback () {
138135 given (tx .isActive ()).willReturn (true );
139136
140- final List <String > l = new ArrayList <>();
141- l .add ("test" );
142-
143137 assertThat (TransactionSynchronizationManager .hasResource (factory )).isFalse ();
144138 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isFalse ();
145139
@@ -159,9 +153,6 @@ void testTransactionRollback() {
159153
160154 @ Test
161155 void testTransactionRollbackWithAlreadyRolledBack () {
162- final List <String > l = new ArrayList <>();
163- l .add ("test" );
164-
165156 assertThat (TransactionSynchronizationManager .hasResource (factory )).isFalse ();
166157 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isFalse ();
167158
@@ -182,9 +173,6 @@ void testTransactionRollbackWithAlreadyRolledBack() {
182173 void testTransactionRollbackOnly () {
183174 given (tx .isActive ()).willReturn (true );
184175
185- final List <String > l = new ArrayList <>();
186- l .add ("test" );
187-
188176 assertThat (TransactionSynchronizationManager .hasResource (factory )).isFalse ();
189177 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isFalse ();
190178
@@ -194,7 +182,7 @@ void testTransactionRollbackOnly() {
194182 EntityManagerFactoryUtils .getTransactionalEntityManager (factory ).flush ();
195183 status .setRollbackOnly ();
196184
197- return l ;
185+ return testList ;
198186 });
199187
200188 assertThat (TransactionSynchronizationManager .hasResource (factory )).isFalse ();
@@ -207,9 +195,6 @@ void testTransactionRollbackOnly() {
207195
208196 @ Test
209197 void testParticipatingTransactionWithCommit () {
210- final List <String > l = new ArrayList <>();
211- l .add ("test" );
212-
213198 assertThat (TransactionSynchronizationManager .hasResource (factory )).isFalse ();
214199 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isFalse ();
215200
@@ -218,7 +203,7 @@ void testParticipatingTransactionWithCommit() {
218203
219204 return tt .execute (status1 -> {
220205 EntityManagerFactoryUtils .getTransactionalEntityManager (factory ).flush ();
221- return l ;
206+ return testList ;
222207 });
223208 });
224209
@@ -234,9 +219,6 @@ void testParticipatingTransactionWithCommit() {
234219 void testParticipatingTransactionWithRollback () {
235220 given (tx .isActive ()).willReturn (true );
236221
237- final List <String > l = new ArrayList <>();
238- l .add ("test" );
239-
240222 assertThat (TransactionSynchronizationManager .hasResource (factory )).isFalse ();
241223 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isFalse ();
242224
@@ -263,9 +245,6 @@ void testParticipatingTransactionWithRollbackOnly() {
263245 given (tx .getRollbackOnly ()).willReturn (true );
264246 willThrow (new RollbackException ()).given (tx ).commit ();
265247
266- final List <String > l = new ArrayList <>();
267- l .add ("test" );
268-
269248 assertThat (TransactionSynchronizationManager .hasResource (factory )).isFalse ();
270249 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isFalse ();
271250
@@ -293,20 +272,17 @@ void testParticipatingTransactionWithRollbackOnly() {
293272 void testParticipatingTransactionWithRequiresNew () {
294273 tt .setPropagationBehavior (TransactionDefinition .PROPAGATION_REQUIRES_NEW );
295274
296- final List <String > l = new ArrayList <>();
297- l .add ("test" );
298-
299275 assertThat (TransactionSynchronizationManager .hasResource (factory )).isFalse ();
300276 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isFalse ();
301277
302278 Object result = tt .execute (status -> {
303279 assertThat (TransactionSynchronizationManager .hasResource (factory )).isTrue ();
304280 return tt .execute (status1 -> {
305281 EntityManagerFactoryUtils .getTransactionalEntityManager (factory ).flush ();
306- return l ;
282+ return testList ;
307283 });
308284 });
309- assertThat (result ).isSameAs (l );
285+ assertThat (result ).isSameAs (testList );
310286
311287 assertThat (TransactionSynchronizationManager .hasResource (factory )).isFalse ();
312288 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isFalse ();
@@ -320,10 +296,6 @@ void testParticipatingTransactionWithRequiresNew() {
320296 void testParticipatingTransactionWithRequiresNewAndPrebound () {
321297 tt .setPropagationBehavior (TransactionDefinition .PROPAGATION_REQUIRES_NEW );
322298
323-
324- final List <String > l = new ArrayList <>();
325- l .add ("test" );
326-
327299 assertThat (TransactionSynchronizationManager .hasResource (factory )).isFalse ();
328300 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isFalse ();
329301
@@ -336,10 +308,10 @@ void testParticipatingTransactionWithRequiresNewAndPrebound() {
336308 assertThat (TransactionSynchronizationManager .hasResource (factory )).isTrue ();
337309 return tt .execute (status1 -> {
338310 EntityManagerFactoryUtils .getTransactionalEntityManager (factory ).flush ();
339- return l ;
311+ return testList ;
340312 });
341313 });
342- assertThat (result ).isSameAs (l );
314+ assertThat (result ).isSameAs (testList );
343315 }
344316 finally {
345317 TransactionSynchronizationManager .unbindResource (factory );
@@ -358,9 +330,6 @@ void testParticipatingTransactionWithRequiresNewAndPrebound() {
358330 void testPropagationSupportsAndRequiresNew () {
359331 tt .setPropagationBehavior (TransactionDefinition .PROPAGATION_SUPPORTS );
360332
361- final List <String > l = new ArrayList <>();
362- l .add ("test" );
363-
364333 assertThat (TransactionSynchronizationManager .hasResource (factory )).isFalse ();
365334 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isFalse ();
366335
@@ -370,10 +339,10 @@ void testPropagationSupportsAndRequiresNew() {
370339 tt2 .setPropagationBehavior (TransactionDefinition .PROPAGATION_REQUIRES_NEW );
371340 return tt2 .execute (status1 -> {
372341 EntityManagerFactoryUtils .getTransactionalEntityManager (factory ).flush ();
373- return l ;
342+ return testList ;
374343 });
375344 });
376- assertThat (result ).isSameAs (l );
345+ assertThat (result ).isSameAs (testList );
377346
378347 assertThat (TransactionSynchronizationManager .hasResource (factory )).isFalse ();
379348 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isFalse ();
@@ -387,9 +356,6 @@ void testPropagationSupportsAndRequiresNew() {
387356 void testPropagationSupportsAndRequiresNewAndEarlyAccess () {
388357 tt .setPropagationBehavior (TransactionDefinition .PROPAGATION_SUPPORTS );
389358
390- final List <String > l = new ArrayList <>();
391- l .add ("test" );
392-
393359 assertThat (TransactionSynchronizationManager .hasResource (factory )).isFalse ();
394360 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isFalse ();
395361
@@ -401,10 +367,10 @@ void testPropagationSupportsAndRequiresNewAndEarlyAccess() {
401367 tt2 .setPropagationBehavior (TransactionDefinition .PROPAGATION_REQUIRES_NEW );
402368 return tt2 .execute (status1 -> {
403369 EntityManagerFactoryUtils .getTransactionalEntityManager (factory ).flush ();
404- return l ;
370+ return testList ;
405371 });
406372 });
407- assertThat (result ).isSameAs (l );
373+ assertThat (result ).isSameAs (testList );
408374
409375 assertThat (TransactionSynchronizationManager .hasResource (factory )).isFalse ();
410376 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isFalse ();
@@ -456,9 +422,6 @@ public void afterCompletion(int status) {
456422
457423 @ Test
458424 void testTransactionCommitWithPropagationSupports () {
459- final List <String > l = new ArrayList <>();
460- l .add ("test" );
461-
462425 tt .setPropagationBehavior (TransactionDefinition .PROPAGATION_SUPPORTS );
463426
464427 assertThat (TransactionSynchronizationManager .hasResource (factory )).isFalse ();
@@ -469,9 +432,9 @@ void testTransactionCommitWithPropagationSupports() {
469432 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isTrue ();
470433 assertThat (status .isNewTransaction ()).isFalse ();
471434 EntityManagerFactoryUtils .getTransactionalEntityManager (factory ).flush ();
472- return l ;
435+ return testList ;
473436 });
474- assertThat (result ).isSameAs (l );
437+ assertThat (result ).isSameAs (testList );
475438
476439 assertThat (TransactionSynchronizationManager .hasResource (factory )).isFalse ();
477440 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isFalse ();
@@ -505,9 +468,6 @@ void testTransactionRollbackWithPropagationSupports() {
505468
506469 @ Test
507470 void testTransactionCommitWithPrebound () {
508- final List <String > l = new ArrayList <>();
509- l .add ("test" );
510-
511471 assertThat (TransactionSynchronizationManager .hasResource (factory )).isFalse ();
512472 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isFalse ();
513473 TransactionSynchronizationManager .bindResource (factory , new EntityManagerHolder (manager ));
@@ -517,9 +477,9 @@ void testTransactionCommitWithPrebound() {
517477 assertThat (TransactionSynchronizationManager .hasResource (factory )).isTrue ();
518478 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isTrue ();
519479 EntityManagerFactoryUtils .getTransactionalEntityManager (factory );
520- return l ;
480+ return testList ;
521481 });
522- assertThat (result ).isSameAs (l );
482+ assertThat (result ).isSameAs (testList );
523483
524484 assertThat (TransactionSynchronizationManager .hasResource (factory )).isTrue ();
525485 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isFalse ();
@@ -563,9 +523,6 @@ void testTransactionRollbackWithPrebound() {
563523
564524 @ Test
565525 void testTransactionCommitWithPreboundAndPropagationSupports () {
566- final List <String > l = new ArrayList <>();
567- l .add ("test" );
568-
569526 tt .setPropagationBehavior (TransactionDefinition .PROPAGATION_SUPPORTS );
570527
571528 assertThat (TransactionSynchronizationManager .hasResource (factory )).isFalse ();
@@ -578,9 +535,9 @@ void testTransactionCommitWithPreboundAndPropagationSupports() {
578535 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isTrue ();
579536 assertThat (status .isNewTransaction ()).isFalse ();
580537 EntityManagerFactoryUtils .getTransactionalEntityManager (factory ).flush ();
581- return l ;
538+ return testList ;
582539 });
583- assertThat (result ).isSameAs (l );
540+ assertThat (result ).isSameAs (testList );
584541
585542 assertThat (TransactionSynchronizationManager .hasResource (factory )).isTrue ();
586543 assertThat (TransactionSynchronizationManager .isSynchronizationActive ()).isFalse ();
0 commit comments