Gestion des transactions / Sessions avec Spring

De iMDEO dans Technique

13 mar 2012

Attention lors de l’utilisation de la gestion des transactions via Spring avec les annotations @Transactionnal.

Il faut absolument que la déclaration du <tx:annotation-driven/> soit dans le même fichier que le tag <context:component-scan /> qui contient les beans avec les @Transactionnal (Souvent les services)

Voici ce merveilleux Blog :

Le plus important étant cette phrase :

only looks for @Transactional on beans in the same application context it is defined in.
This means that, if you putin a WebApplicationContext for a DispatcherServlet, it only checks for @Transactional beans in your controllers, and not your services.

Dans le cas ou la configuration est mauvaise, un message d’erreur stipulant que la session hibernate n’est pas ouverte est alors renvoyée.

Dans le cas de l’utilisation du pattern OpenSessionInViewFilter la session s’ouvre ainsi au début de l’interception de la requête HTTP, il n’y a donc pas ce problème mais il faut vérifier que le service comprenant les @Transactionnal est bien une instance de org.springframework.aop.framework.JdkDynamicAopProxy (Géré par Spring).

Commentaire

7 − six =