1
1
/*
2
- * Copyright 2002-2024 the original author or authors.
2
+ * Copyright 2002-2025 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
58
58
* @author Juergen Hoeller
59
59
* @author Stephane Nicoll
60
60
* @author Sam Brannen
61
+ * @author Yanming Zhou
61
62
* @since 3.1
62
63
*/
63
64
class EnableTransactionManagementTests {
@@ -243,8 +244,8 @@ void transactionalEventListenerRegisteredProperly() {
243
244
}
244
245
245
246
@ Test
246
- void spr11915TransactionManagerAsManualSingleton () {
247
- AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (Spr11915Config .class );
247
+ void transactionManagerAsManualSingleton () {
248
+ AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (ManualSingletonConfig .class );
248
249
TransactionalTestBean bean = ctx .getBean (TransactionalTestBean .class );
249
250
CallCountingTransactionManager txManager = ctx .getBean ("qualifiedTransactionManager" , CallCountingTransactionManager .class );
250
251
@@ -264,25 +265,49 @@ void spr11915TransactionManagerAsManualSingleton() {
264
265
}
265
266
266
267
@ Test
267
- void gh24291TransactionManagerViaQualifierAnnotation () {
268
- AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (Gh24291Config .class );
269
- TransactionalTestBean bean = ctx .getBean (TransactionalTestBean .class );
270
- CallCountingTransactionManager txManager = ctx .getBean ("qualifiedTransactionManager" , CallCountingTransactionManager .class );
268
+ void transactionManagerViaQualifierAnnotation () {
269
+ AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (QualifiedTransactionConfig .class );
270
+
271
+ TransactionalTestBean bean = ctx .getBean ("testBean" , TransactionalTestBean .class );
272
+ TransactionalTestBeanWithNonExistentQualifier beanWithNonExistentQualifier = ctx .getBean (
273
+ "testBeanWithNonExistentQualifier" , TransactionalTestBeanWithNonExistentQualifier .class );
274
+ TransactionalTestBeanWithInvalidQualifier beanWithInvalidQualifier = ctx .getBean (
275
+ "testBeanWithInvalidQualifier" , TransactionalTestBeanWithInvalidQualifier .class );
276
+
277
+ CallCountingTransactionManager qualified = ctx .getBean ("qualifiedTransactionManager" ,
278
+ CallCountingTransactionManager .class );
279
+ CallCountingTransactionManager primary = ctx .getBean ("primaryTransactionManager" ,
280
+ CallCountingTransactionManager .class );
271
281
272
282
bean .saveQualifiedFoo ();
273
- assertThat (txManager .begun ).isEqualTo (1 );
274
- assertThat (txManager .commits ).isEqualTo (1 );
275
- assertThat (txManager .rollbacks ).isEqualTo (0 );
283
+ assertThat (qualified .begun ).isEqualTo (1 );
284
+ assertThat (qualified .commits ).isEqualTo (1 );
285
+ assertThat (qualified .rollbacks ).isEqualTo (0 );
276
286
277
287
bean .saveQualifiedFooWithAttributeAlias ();
278
- assertThat (txManager .begun ).isEqualTo (2 );
279
- assertThat (txManager .commits ).isEqualTo (2 );
280
- assertThat (txManager .rollbacks ).isEqualTo (0 );
288
+ assertThat (qualified .begun ).isEqualTo (2 );
289
+ assertThat (qualified .commits ).isEqualTo (2 );
290
+ assertThat (qualified .rollbacks ).isEqualTo (0 );
281
291
282
292
bean .findAllFoos ();
283
- assertThat (txManager .begun ).isEqualTo (3 );
284
- assertThat (txManager .commits ).isEqualTo (3 );
285
- assertThat (txManager .rollbacks ).isEqualTo (0 );
293
+ assertThat (qualified .begun ).isEqualTo (3 );
294
+ assertThat (qualified .commits ).isEqualTo (3 );
295
+ assertThat (qualified .rollbacks ).isEqualTo (0 );
296
+
297
+ beanWithNonExistentQualifier .findAllFoos ();
298
+ assertThat (primary .begun ).isEqualTo (1 );
299
+ assertThat (primary .commits ).isEqualTo (1 );
300
+ assertThat (primary .rollbacks ).isEqualTo (0 );
301
+
302
+ beanWithInvalidQualifier .findAllFoos ();
303
+ assertThat (primary .begun ).isEqualTo (2 );
304
+ assertThat (primary .commits ).isEqualTo (2 );
305
+ assertThat (primary .rollbacks ).isEqualTo (0 );
306
+
307
+ // no further access to qualified transaction manager
308
+ assertThat (qualified .begun ).isEqualTo (3 );
309
+ assertThat (qualified .commits ).isEqualTo (3 );
310
+ assertThat (qualified .rollbacks ).isEqualTo (0 );
286
311
287
312
ctx .close ();
288
313
}
@@ -386,6 +411,16 @@ public void saveQualifiedFooWithAttributeAlias() {
386
411
public static class TransactionalTestBeanSubclass extends TransactionalTestBean {
387
412
}
388
413
414
+ @ Service
415
+ @ Qualifier ("nonExistentBean" )
416
+ public static class TransactionalTestBeanWithNonExistentQualifier extends TransactionalTestBean {
417
+ }
418
+
419
+ @ Service
420
+ @ Qualifier ("transactionalTestBeanWithInvalidQualifier" )
421
+ public static class TransactionalTestBeanWithInvalidQualifier extends TransactionalTestBean {
422
+ }
423
+
389
424
390
425
@ Configuration
391
426
static class PlaceholderConfig {
@@ -558,7 +593,7 @@ public PlatformTransactionManager annotationDrivenTransactionManager() {
558
593
@ Configuration
559
594
@ EnableTransactionManagement
560
595
@ Import (PlaceholderConfig .class )
561
- static class Spr11915Config {
596
+ static class ManualSingletonConfig {
562
597
563
598
@ Autowired
564
599
public void initializeApp (ConfigurableApplicationContext applicationContext ) {
@@ -581,7 +616,7 @@ public CallCountingTransactionManager otherTxManager() {
581
616
@ Configuration
582
617
@ EnableTransactionManagement
583
618
@ Import (PlaceholderConfig .class )
584
- static class Gh24291Config {
619
+ static class QualifiedTransactionConfig {
585
620
586
621
@ Autowired
587
622
public void initializeApp (ConfigurableApplicationContext applicationContext ) {
@@ -596,7 +631,18 @@ public TransactionalTestBeanSubclass testBean() {
596
631
}
597
632
598
633
@ Bean
599
- public CallCountingTransactionManager otherTxManager () {
634
+ public TransactionalTestBeanWithNonExistentQualifier testBeanWithNonExistentQualifier () {
635
+ return new TransactionalTestBeanWithNonExistentQualifier ();
636
+ }
637
+
638
+ @ Bean
639
+ public TransactionalTestBeanWithInvalidQualifier testBeanWithInvalidQualifier () {
640
+ return new TransactionalTestBeanWithInvalidQualifier ();
641
+ }
642
+
643
+ @ Bean
644
+ @ Primary
645
+ public CallCountingTransactionManager primaryTransactionManager () {
600
646
return new CallCountingTransactionManager ();
601
647
}
602
648
}
0 commit comments