Gestionnaires de transactions multiples JPA
J'en ai un applicationContext.xml fichier, et il a deux org.springframework.orm.jpa.JpaTransactionManager (chacune avec sa propre unité de persistance, de différentes bases de données) configuré dans un Printemps middleware application personnalisée.
Je veux utiliser l'annotation des transactions (@Transactionnelle), de ne pas déconner avec TransactionStatus s'engager, de sauvegarde et de restauration.
Un collègue a mentionné que quelque chose se confond faisant cela, lorsqu'il y a plusieurs responsables de la transaction, même si le contexte fichier est configuré correctement configuré (les références à la bonne unité de persistance.
- On jamais voir un problème?
Dans votre config, avez-vous des deux responsables de la transaction?
Auriez-vous txManager1 et txManager2?
C'est ce que j'ai avec JPA, deux différents beans Spring qui sont responsables de la transaction.
source d'informationauteur bmw0128 | 2008-09-16
Vous devez vous connecter pour publier un commentaire.
Je suppose que vous avez 2 choix
Si vos cas d'utilisation n'a pas besoin de mises à jour pour les deux bases de données au sein de la même transaction, vous pouvez utiliser deux JpaTransactionManagers, mais je ne suis pas sûr que vous serez en mesure d'utiliser le @approche Transactionnelle? Dans ce cas, vous auriez besoin de repli sur l'ancien mécanisme de l'aide d'un simple TransactionProxyFactoryBean de définir les limites de transaction, par exemple:
Si vous êtes nécessitent une transaction qui s'étend des deux bases de données, alors vous aurez besoin d'utiliser un gestionnaire de transactions JTA. Le API états:
Ce que cela signifie est que vous devrez fournir une transaction JTA manager. Dans notre application, nous utilisons config similaire à la suivante:
Si vous déployez dans un serveur d'applications, puis le printemps JtaTransactionManager besoin de faire une recherche à la vraie compatibles XA transaction JTA manager fourni par le serveur d'applications. Cependant, vous pouvez également utiliser un autonome JTA gestionnaire de transactions (mais je n'ai pas essayé moi-même encore)
Comme pour la configuration du fournisseur de persistance Jpa, je ne suis pas familier. Ce fournisseur de persistance JPA utilisez-vous?
Le code ci-dessus est basée sur notre approche, où nous avons été à l'aide de code Hibernate, par opposition à Hibernate JPA mise en œuvre. Dans ce cas, nous avons été en mesure de se débarrasser des deux HibernateTransactionManager de haricots, et de simplement de veiller à ce que les deux SessionFactories ont été injectés avec le même JTA TM, et ensuite utiliser le tx:annotation-driven élément.
Espère que cette aide
La seule situation dans laquelle vous pouvez avoir deux Printemps responsables de la transaction est si vous n'avez jamais tant les transactions ouvertes en même temps. Ce n'est pas intrinsèquement à faire avec des transactions distribuées - les mêmes restrictions s'appliquent même si vous voulez les deux sources de données ont complètement distincte (mais susceptibles de se chevaucher dans le temps) transaction lifecyles.
Interne du Printemps, les gestionnaires de transaction tous les utiliser au Printemps TransactionSynchronizationManager qui garde un tas de critique de l'état statique ThreadLocal variables, de sorte que les gestionnaires de transaction sont garantis à écraser tous les uns les autres de l'état.