Bonjour,
j'utilise Spring et je veux externaliser une methode de classe pour gerer differemment les transaction.
Au départ voici mon code
Ce code annule toute la transaction et rien n'est stocké en base. Donc je decide d'utiliser @Transactional(propagation= Propagation.REQUIRES_NEW).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 @Transaction public class A { public List<Dto> methodA(...) { for (.............) { methodB(...); } } public Dto methodB(...) { ..... if (...) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } .... } }
Pour que ça marche, JE DOIS externaliser la méthode methodB(...) dans une autre classe.
Et ça marche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 @Transaction public class B { @Transactional(propagation= Propagation.REQUIRES_NEW) public Dto methodB(...) { ..... if (...) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } .... } } @Transaction public class A { @Autowire B instanceB; @Transactional(propagation = Propagation.REQUIRED) public List<Dto> methodA(...) { for (.............) { instanceB.methodB(...); } } }
Mais je suspecte qu'il y a une erreur de design avec cette méthode. Je ne sais pas le designer d'une autre manière.
Pouvez vous me dire comment faire (probablement un autre DESIGN PATTERN)
Partager