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>
Était-ce utile?

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 le   JtaTransactionManager 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top