2014-07-17 3 views
3

J'ai un projet client-serveur existant qui utilise JDBC simple pour communiquer avec une seule instance MySQL. Maintenant je voudrais l'étendre pour supporter plusieurs instances MySQL (partagées) en utilisant n'importe quelle implémentation JPA et avec l'aide de l'implémentation JTA qui supporte les transactions XA.Comment utiliser JPA et JTA avec un gestionnaire de transactions?

Ma question est comment dois-je procéder? Après plusieurs heures de googling, ce que je comprends, je ne peux pas utiliser les implémentations JTA sans aucun conteneur de serveur d'application, est-ce vrai? Pour mon but je serais heureux si les logiques d'application pourraient être abstraites en utilisant n'importe quelle couche ORM - une implémentation JPA (comme EclipseLink Partition ou OpenJPA Slice) et ensuite en utilisant un gestionnaire de transaction (comme BTM) pour exécuter les transactions XA fournissant ACID garantit l'ensemble sous-jacent des instances MySQL. Jusqu'ici j'ai essayé le didacticiel vidéo dans YouTube (https://www.youtube.com/watch?v=Vmr6GAlbG10) en expérimentant avec EclipseLink et une seule instance DB. Maintenant, je prévois de l'étendre sur plusieurs instances, mais je ne sais pas comment.

Toutes les suggestions, les liens et les lignes directrices seraient très utiles. Je suis un peu nouveau à ce sujet donc acceptez tout inconvénient si j'ai mal compris. Merci.

Répondre

0

Il est également possible d'utiliser JTA dans le contexte d'une application Spring. En outre, vous POUVEZ l'utiliser dans le contexte de votre propre application sans frameworks, mais c'est assez compliqué, car vous devrez contrôler quoi/quand/où est injecté et comment la méthode appelée est retournée (avec Exceptions ou sans pour autant). Mais bien sûr, cela dépend vraiment de ce que vous voulez utiliser de JTA: la propagation de transactions ou simplement l'utilisation de différentes bases de données dans la même transaction JTA. Donc, ma suggestion est d'utiliser Spring, si vous ne voulez pas utiliser un conteneur d'application (Java EE).

+0

Pourriez-vous fournir plus de détails concernant votre proposition, par ex. un tutoriel ou un exemple? –

+0

Ma proposition avec Spring? Il suffit de chercher sur internet pour "spring jta" et vous y trouverez de nombreux exemples. Par exemple, vérifiez [l'article de Spring sur JTA] (http://spring.io/blog/2011/08/15/configuring-spring-and-jta-without-full-java-ee/). –

+0

@Geziefer et parce que vous avez déjà de l'expérience avec Java EE: vous configurez simplement le gestionnaire de transactions, et dites à vos EntityManagers qu'ils sont JTA (pas de ressource locale), et qu'ils seront automatiquement injectés par Spring transaction. Les annotations sont très similaires à celles de Java EE, mais seules les propagations de transaction sont différentes.(et probablement vous devez annoter les méthodes publiques avec '@ Transactional', par rapport à EJB, où c'est par défaut) –

1

Vous pouvez utiliser le gestionnaire de transactions JTA autonome comme Atomikos http://www.atomikos.com/ ou SimpleJTA http://simplejta.sourceforge.net/ complètement en dehors de tout récipient.

En savoir plus sur les gestionnaires JTA autonomes: What is a good open source Java SE JTA TransactionManager implementation?

En outre, il est possible d'utiliser les implémentations populaires JPA en mode autonome avec combinaison avec JTA autonome (ce que vous avez demandé). Voici un exemple pour Atomikos et Hibernate http://www.atomikos.com/Documentation/HibernateThreeStandalone

Mais ce n'est pas une excellente façon d'utiliser ces technologies et vous avez des chances et du temps - passez à l'architecture normale à trois niveaux avec le serveur d'applications.

+0

@jmkam: Je ne connais pas l'OP, mais je pense que cette réponse vaut la peine, en particulier l'exemple avec Hibernate + JTA dans un environnement autonome, qui pourrait aussi bien être utilisé dans Java EE. Merci aussi pour la réponse d'Andrei, mais comme il se spécialise sur Spring et que l'OP ne l'a pas dans les tags ni dans la question, j'irais pour celui-ci. –

Questions connexes