2011-01-17 10 views
7

Je développe une application J2EE qui est déployée sur le serveur d'applications JBoss. L'application est composée d'un composant EJB 2.x et d'un composant Web et s'exécute sur un ordinateur local ou un serveur distant. La base de données est Oracle ou SQL Server et n'est pas dans un environnement distribué. J'utilise Hibernate 3.6 (implémentation de JPA 2.0) pour les transactions. Dois-je utiliser JTA qui est une transaction gérée par conteneur ou est-il trop sollicité pour l'utiliser?utiliser la transaction JTA ou non?

Actuellement, j'utilise JTA et il s'avère qu'il fonctionne bien, mais avec quelques petits problèmes que je ne sais pas si c'est lié à la gestion des transactions ou non. Sera-t-il plus facile ou plus fiable d'utiliser la gestion des transactions locales?

+0

double possible de [transactions JTA ou locales JPA2 + Hibernate 3.6.0?] (Http://stackoverflow.com/questions/4559764/jta-or-local-transactions-in-jpa2hibernate- 3-6-0) –

+0

Merci pour votre commentaire. Alors quel gestionnaire de transactions dois-je utiliser si j'utilise à la fois EJB 2.x et JPA? Pour l'application Spring-Roo, la valeur par défaut est org.springframework.orm.jpa.JpaTransactionManager mais je suppose que je devrais utiliser autre chose. – newguy

Répondre

16

Les transactions JTA sont toujours recommandées au-dessus des autres types d'API de transaction, en particulier si vous faites référence aux transactions natives qui font toujours partie de l'API JPA. Notez que vous ne pouvez pas dire 'transactions locales JTA vs ressources', car JTA gère réellement les transactions locales de ressources entre autres. Gavin King (créateur d'Hibernate) a déjà indiqué dans une interview que cette API spécifique à JPA était une erreur et que l'API JTA beaucoup plus flexible devrait être préférée. En particulier lors de l'utilisation de transactions déclaratives, JTA est très léger. Le mot overkill s'appliquerait en fait plus à l'utilisation de l'API de transaction native JPA, puis à l'utilisation de JTA.

Il y a quelque chose à dire sur le choix entre l'utilisation de transactions XA ou locales avec JTA. Voir ma réponse ici pour plus de détails à ce sujet: JTA or LOCAL transactions in JPA2+Hibernate 3.6.0?

Je me demande pourquoi vous utilisez EJB 2 en combinaison avec JPA 2.0. EJB 3.1 serait un choix beaucoup plus logique ici. EJB 2 est complètement obsolète (sera supprimé en Java EE 7).

+0

Merci arjan. Je suis actuellement dans une phase de migration de mon projet, j'ai donc besoin d'EJB 2 et de JPA 2 pour pouvoir tester les changements qui n'affectent pas le comportement de mon projet. À la fin de la journée, mon projet sera entièrement migré vers JPA 2. – newguy

+0

De rien. Notez que les combinaisons les plus puissantes sont EJB 3.1 + JPA 2. Ces deux se complètent grandement. –

1

Je recommanderais d'utiliser la transaction XA, même si l'application n'accède actuellement qu'à une seule ressource (la base de données). Resons:

1) À l'avenir, si l'application décide d'inclure une autre ressource transactionnelle en dehors de la base de données courante, elle trouvera plus facilement la gestion des transactions XA déjà en place et les multiples ressources transactionnelles en une seule transaction.

2) Comme vous avez actuellement une seule ressource transactionnelle, je ne pense pas que les performances seraient affectées par l'utilisation de XA par rapport à une transaction locale. La raison en est que les gestionnaires de transactions XA/JTA font déjà une sorte d'optimisation pour les cas de ressource transactionnelle unique (ils appellent cela une optimisation en une phase).

Espérons que ça aide.

Nitin

+1

YAGNI, on ne devrait jamais construire des choses basées sur des exigences spéculatives. S'il y a un besoin évident de XA, utilisez-le. Ne le fais pas parce que tu peux en avoir besoin. – geoaxis

Questions connexes