2013-09-05 4 views
3

J'ai une classe qui est annotée avec @Service. J'ai une méthode qui devrait mettre à jour deux sources de données différentes (base de données et un référentiel de contenu). J'ai ajouté @Transactional sur la méthode dans la classe de service. Sans autres personnalisations Est-il correct que les deux classes de référentiel (annotées avec @Repository) soient exécutées dans la même transaction?Utilisation correcte de @Transactional au printemps

J'utilise JBoss et j'ai 7.1.1 ces deux lignes dans la configuration Spring (3.2):

<tx:jta-transaction-manager/> 
<tx:annotation-driven proxy-target-class="true"/> 

Ou est-ce terme dans deux transactions différentes? Je veux uniquement valider les données lorsqu'aucune exception d'exécution n'est levée dans la méthode de la couche de service. Il est appelé à partir d'une méthode de contrôleur (classe annotée avec @Controller).

Je vais ajouter 500 bounty dès que possible au gars qui m'aide à obtenir Jackrabbit et une connexion de base de données à exécuter dans la même transaction. J'utilise JBoss 7.1.1, Spring 3.2, Jackrabbit 2.6.2 JCA.

+0

Votre configuration devrait être suffisante car le printemps prendra les haricots requis de jndi, mais JTA est généralement un PITA. Je vous suggère de tester les échecs partiels avec les sources de données et les plantages d'applications, car les transactions JTA ne sont pas faciles à récupérer et vous devrez peut-être effectuer des actions manuelles pour supprimer la transaction partielle du gestionnaire de transactions et des bases de données. – Augusto

Répondre

0

Sans aucune autre personnalisation, les deux classes de référentiel s'exécuteront dans différentes transactions. Ce que vous cherchez s'appelle un Distributed Transaction, il y a des réponses StackOverflow à propos de ce here et here. Si vous n'exécutez pas sur un serveur Java EE, voici un article qui décrit la configuration des transactions distribuées pour un conteneur de servlet simple tel que Tomcat.

Questions connexes