externaliser une methode pour gérer une transaction Requires_new
Bonjour,
j'utilise Spring et je veux externaliser une methode de classe pour gerer differemment les transaction.
Au départ voici mon code
Code:
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();
}
....
}
} |
Ce code annule toute la transaction et rien n'est stocké en base. Donc je decide d'utiliser @Transactional(propagation= Propagation.REQUIRES_NEW).
Pour que ça marche, JE DOIS externaliser la méthode methodB(...) dans une autre classe.
Code:
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(...);
}
}
} |
Et ça marche
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)