Bonjour, La gestion manuelle des transactions dans les EJB étant très lourde et sans intérêt metier, il serait bien de la modifier. Solution 1 ---------- La première solution consisterait a ajouter un interceptor qui ouvrirait et fermerait la transaction. Le principe consiste à se basé sur le fait que les EJB ne manipule pas la transaction mais seulement les DAO. Le but est donc d'obtenir un DAO avec une transaction topia par un moyen a élaborer. Un solution pourrait être de que l'interceptor stocke la transaction qu'il vient d'ouvrir dans un ThreadLocal et que le DAOHelper soit remplacé par une autre implementation qui instancie les DAO avec la transaction du ThreadLocal. Cela permettrait également d'appeler d'autre méthode d'autres EJB avec une unique transaction correctement. Solution 2 ---------- L'autre solution serait de faire gérée par le conteneur EJB, donc potentiellement que Topia devienne "JTA complaint". Je vais essayer de me pencher sur cette 2eme option -- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
Le 06/04/2012 19:01, Eric Chatellier a écrit :
Solution 2 ---------- L'autre solution serait de faire gérée par le conteneur EJB, donc potentiellement que Topia devienne "JTA complaint".
J'ai essayé trop longtemps cette méthode. J'ai plus ou moins réussi a creer un interceptor ejb qui recupère la Transaction et qui enregistre dedans une nouvelle xaresource qui est le topia context. Par contre, je n'ai pas réussi a recuperer ce topia context dans les ejb ou les dao, même avec un thread local. -- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
Le Wed, 11 Apr 2012 15:32:36 +0200, Eric Chatellier <chatellier@codelutin.com> a écrit :
Le 06/04/2012 19:01, Eric Chatellier a écrit :
Solution 2 ---------- L'autre solution serait de faire gérée par le conteneur EJB, donc potentiellement que Topia devienne "JTA complaint".
J'ai essayé trop longtemps cette méthode.
J'ai plus ou moins réussi a creer un interceptor ejb qui recupère la Transaction et qui enregistre dedans une nouvelle xaresource qui est le topia context.
Sa ça va, je l'ai déjà fait, on savait que c'était faisable.
Par contre, je n'ai pas réussi a recuperer ce topia context dans les ejb ou les dao, même avec un thread local.
Puisse t'on savoir ce que tu as essayé et pourquoi ça ne marche pas ??? On aurait put en parler avant que tu décrète y avoir passer trop de temps non ? Sylvain
Le 11/04/2012 15:53, letellier a écrit : > Sa ça va, je l'ai déjà fait, on savait que c'était faisable. Tu as déjà utilisé des xaresources avec Topia ? > >> Par contre, je n'ai pas réussi a recuperer ce topia >> context dans les ejb ou les dao, même avec un >> thread local. > Puisse t'on savoir ce que tu as essayé et pourquoi ça ne marche pas ??? > On aurait put en parler avant que tu décrète y avoir passer trop de temps non ? Pas grand chose en fait: - ThreadLocal set() ThreadLocal.get() Mais comment utiliser le meme object ThreadLocal dans l'interceptor et l'ejb ? -- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
participants (2)
-
Eric Chatellier -
letellier