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.