Bonjour à tous,
Le problème rencontré est de définir une transaction sur une méthode d’un objet tout en conservant son fonctionnement dynamique.
Pour simplifier le problème nous avons une classe ClassA définissant 3 méthodes method1, method2, méthod3.
La method1 fait appel à méthod2 et method3 :
Method1() {
Method2() ;
Method3() ;
}
Sans l’utilisation des transactions : l’appel de la méthode method1 enchaine bien les appels à méthod2 puis method3. On a bien :
ClassA.method1()
ClassA.method2()
ClassA.method3()
En positionnant une transaction déclarative uniquement sur method2 - via Spring - le fonctionnement constaté est le suivant :
Sur une instance ProxyClassA, c’est la method1 du ProxyClassA.method1 qui est sollicitée. Ensuite lors de l’appel à la method2 c’est l’appel à la ClassA.method2 qui est effectué. Finalement on a l’arbre d’appel suivant :
ProxyClassA.method1()
ClassA.method2()
ClassA.method3()
Au final, la méthode ProxyClass.method2 n’est jamais appelée et donc la transaction n’est jamais activée.
Comment peut-on avoir l’arbre d’appel suivant (en déclarant une transaction déclarative sur method2) sans modifier le code Java afin de le laisser aussi indépendant que possible de Spring ?
ProxyClassA.method1()
ProxyClassA.method2()
ProxyClassA.method3()
Merci de votre aide.
Partager