configuration Spring JTA - comment définir TransactionManager?
-
21-09-2019 - |
Question
Nous configurons notre transaction de printemps dans la configuration Spring comme:
<tx:jta-transaction-manager/>
Je crois que cela signifie que le printemps découvrira automatiquement la mise en œuvre JTA sous-jacente. Alors, quand nous commençons jusqu'à JBoss, nous voyons ces messages tandis que les recherches de printemps:
[JtaTransactionManager] [ ] No JTA TransactionManager found at fallback JNDI location [java:comp/Tran
sactionManager]
javax.naming.NameNotFoundException: TransactionManager not bound
<<Big stack trace>>
<<More of the same>>
Et puis finalement voir:
[JtaTransactionManager] [ ] JTA TransactionManager found at fallback JNDI location [java:/Transaction
Manager]
[JtaTransactionManager] [ ] Using JTA UserTransaction: org.jboss.tm.usertx.client.ServerVMClientUserT
ransaction@1f78dde
La question est - comment pouvons-nous modifier notre balise <tx:jta-transaction-manager/>
pour configurer explicitement la mise en œuvre de java:/Transaction Manager
JTA donc nous évitons toutes ces traces de pile dans les journaux? (Je préfère ne pas changer simplement les niveaux de journalisation Log4J)
Mise à jour : Je l'ai remplacé <tx:jta-transaction-manager/>
avec la configuration ci-dessous et il semble fonctionner .. Je suppose que cela est bien
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManagerName" value="java:/TransactionManager"/>
</bean>
La solution
Oui, c'est bien. La trace de pile que vous voyez était aussi bien: <tx:jta-transaction-manager/>
tente d'acquérir le gestionnaire de transactions à partir d'un certain nombre de différents endroits standard; pour chaque recherche JNDI échoué, vous verrez le javax.naming.NameNotFoundException
.
java:/TransactionManager
est l'endroit où se lie à JBoss par défaut; d'autres conteneurs de servlet par défaut java:/comp/TransactionManager
, que je pense est censé être l'emplacement « standard » pour le TM.
De la référence printemps documentation :
Pour les scénarios standard, y compris WebLogic, WebSphere et OC4J, pensez en utilisant la pratique
<tx:jta-transaction-manager/>
élément de configuration. Cette volonté détecter automatiquement le sous-jacent serveur et choisir la meilleure transaction gestionnaire disponible pour la plate-forme. Cela signifie que vous n'aurez pas à configurer un adaptateur spécifique au serveur les classes (comme indiqué ci-après sections) explicite; ils seront plutôt être choisi automatiquement, avec leJtaTransactionManager
standard fallback par défaut.
Autres conseils
Une « erreur » commune est de regrouper des choses comme jta.jar
et / ou jbossall-client.jar
dans le composant J2EE vous déployez. Vérifiez bien s'il vous plaît et de les supprimer si tel est le cas.