Bonjour,
j'utilise Spring et je veux externaliser une methode de classe pour gerer differemment les transaction.


Au départ voici mon code

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();
   }
   ....
  }
 
}
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 : 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(...);
      }
  }
 
}
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)