2013-07-04 1 views
4

J'ai une application qui utilise la gestion des transactions déclarative de Spring. Comment puis-je le déployer dans un conteneur TomEE + afin que l'application utilise le gestionnaire de transactions JTA de TomEE?Comment puis-je accéder au gestionnaire de transactions JTA de TomEE?

Plus précisément, comment puis-je me référer au gestionnaire de transactions intégré dans le fichier "application-context.xml" de Spring?

La configuration de gestion des transactions de Spring semble vouloir rechercher le gestionnaire de transactions soit par une référence de bean, soit par une recherche JNDI; J'ai passé une journée à faire des recherches sur ce sujet et à regarder le code source; J'ai trouvé beaucoup de discussions sur la question (références ci-dessous) mais pas de façon définitive.

Ce que j'ai dans META-INF/persistence.xml de l'application est la suivante:

<persistence-unit name="myPersistenceUnit" transaction-type="JTA"> 
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> 
    <jta-data-source>myDs-managed</jta-data-source> 
    <non-jta-data-source>myDs-unmanaged</non-jta-data-source> 
    <properties> 
     <property name="openjpa.jdbc.DBDictionary" 
      value="org.apache.openjpa.jdbc.sql.PostgresDictionary"/>  
     <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema"/> 
     <property name="openjpa.Run 
     <property name="openjpa.Log" value="slf4j" /> 
    </properties> 
</persistence-unit> 

Et, dans les applications META-INF/fichier printemps/applicationContext.xml J'ai ceci: (je l'ai essayé différentes valeurs pour transactionManagerName comme suggéré dans diverses discussions sur le sujet, car il semble être non standard sur les serveurs d'application

<tx:annotation-driven mode="aspectj" transaction-manager="txManager" /> 
<bean class="org.springframework.transaction.jta.JtaTransactionManager" 
     id="txManager"> 
     <property name="transactionManagerName" 
         value=" java:comp/TransactionManager"/> 
</bean> 

Voici un exemple qui prétend travailler pour JBoss: Spring JTA configuration - how to set TransactionManager?

est ici une quasi-collision qui ne fonctionne pas dans un fichier de configuration xml: https://issues.apache.org/jira/browse/TOMEE-38

Voici comment le faire dans le code java si vous avez vos mains sur initialContext: http://osdir.com/ml/users.openejb.apache.org/2012-11/msg00110.html

[Edit: La documentation Tomee parle de la façon de déclarer un gestionnaire de transactions, mais il dit de le faire dans Tomee.xml, qui appartient au serveur et non à la webapp individuelle; Je souhaite configurer le gestionnaire de transactions pour une seule application et non pour l'ensemble du serveur: http://tomee.apache.org/containers-and-resources.html]

+0

Quel est le nom de classe du gestionnaire de transactions fourni par JTA par défaut? Je remarque que la distribution TomEE + inclut geronimo-transaction et openejb-core, qui ont toutes les deux une bonne partie de la transaction. –

Répondre

3

Avez-vous essayé java:comp/env/TransactionManager pour le nom de transactionManagerName? , Avez-vous également déclaré TransactionManager et DataSource comme décrit ici: http://tomee.apache.org/containers-and-resources.html?

+0

Jukka, merci, oui, j'ai essayé java: comp/env/TransactionManager. J'ai regardé la page de documentation que vous avez référencée, mais elle parle de déclarer les sources de données et le gestionnaire de transactions dans tomee.xml, qui, si je comprends bien, configure l'instance de serveur entière pour toutes les applications; Je veux juste configurer le datasoure et le gestionnaire de transaction pour une seule application. (question éditée pour clarifier cela) –

+0

Spring ne créera pas pour vous le gestionnaire de transactions ou les sources de données sous-jacents du conteneur. Vous devez donc les déclarer dans tomee.xml (ou un autre fichier de configuration spécifique au conteneur). Je ne sais pas si TomEE vous permet de limiter leur portée à une seule application. – Jukka

+0

Mais si vous en avez VRAIMENT besoin, vous pourriez être en mesure de déclarer le gestionnaire de transactions TomEE et les sources de données comme des beans dans votre config de printemps. Mais personnellement, je voudrais juste que le conteneur les gère et ne s'inquiète pas des détails. – Jukka

Questions connexes