7
votes

Comment le concept de transaction est mis en œuvre dans EJB

Je veux savoir comment la transaction est mise en œuvre interne dans EJB. Je veux connaître la logique qu'ils utilisent pour créer une transaction. Si vous pouviez signaler certains articles qui seraient utiles


0 commentaires

5 Réponses :


0
votes

hibernate a transactification :

une usine abstraite pour les instances de transaction. Les implémentations concrètes sont spécifiées par Hibernate.Transaction.Factory_class.

Il a des implémentations: JDBCTransactionFactory , jTatransactionFactory , CMTTransactionFactory . Ces usines créent une instance de transaction - par exemple jdbctransaction .

alors je ne peux pas vous dire ce qui se passe pour JTA et CMT, mais pour JDBC C'est aussi simple que de régler l'auto-commit vers FALSE (lorsque vous appelez Commencer une transaction): xxx

et respectivement sur transaction.commit () : connection.commit ()

Si une exception se produit lorsqu'elle fonctionne avec la session, elle invoque connexion.rollback ()


3 commentaires

Et comment cela répond-il à la question de l'OP?


@talonx La question était initialement sur l'hibernate. Et ma réponse l'explique - il montre comment manipulation de transaction est mise en œuvre. Et comme EJB peut utiliser Hibernate comme JPA fourni, je pense que c'est raison. Quelle partie que vous n'avez pas aimé?


Merci de clarifier cela. Peut-être que l'OP a modifié la question, car je ne vois aucune référence à hibernation - auquel cas, ce n'est pas une question spécifique à l'hibernation.



8
votes

Hibernate ne met pas Implément des transactions , il dépend des transactions JDBC et des transactions JDBC ou des transactions JTA (soit gérées de conteneurs gérées).

En ce qui concerne les EJBS, si vous souhaitez comprendre les détails d'un gestionnaire de transactions JTA, vous devrez parler couramment les interfaces JTA usertransaction , transactionmanager , et < Code> xaresource décrit dans le Spécification JTA < / a>. Tutoriel et référence API JDBC, troisième édition sera également utile pour comprendre la partie XA d'un pilote JDBC.

Ensuite, obtenez les sources d'un conteneur EJB (comme JBoss) ou d'un gestionnaire de transactions JTA autonome (comme Atomikos) pour analyser la partie TM. Et bonne chance.


3 commentaires

Merci d'avoir répondu. Je parlais de la mise en œuvre de la transaction dans l'EJB ou de toute mise en œuvre de la JTA.


Je suis extrêmement désolé, il y a une erreur JavaScript dans mon navigateur.Je ont évité votre réponse.


@Suresh Eh bien, pas de problème. Mais je dois admettre que j'ai été surpris parce que 1. Il n'y a rien de mal à ma réponse 2. Je trouve cela dur pour bowervote des réponses sur vos propres questions. N'hésitez pas à le revenir si c'était une erreur.



2
votes

de EJB en action livre

Le protocole couramment utilisé pour réaliser plusieurs ressources est le mot à deux phases . Le protocole de validation à deux phases effectue une étape préparatoire supplémentaire avant la validation finale. Chaque gestionnaire de ressources impliqué est demandé si la transaction en cours peut être commise avec succès . Si l'un des gestionnaires de ressources indique que la transaction ne peut pas être commise si une tentative de tentative, toute la transaction est abandonnée (roulée). Sinon, la transaction est autorisée à procéder et tous les gestionnaires de ressources sont invités à commettre.

Un gestionnaire de ressources peut être une base de données, par exemple. D'autres exemples incluent un service de messagerie. Le composant qui coordonne les transactions est appelé gestionnaire de transactions.

Supposons que vous ayez une application qui implique deux bases de données distinctes . Comment le gestionnaire de transaction effectue-t-il son travail en utilisant un protocole de validation de deux phases?

  1. Gestionnaire de transactions Demandez à la base de données 1 s'il peut commettre la transaction actuelle
  2. Si oui, demandez à la base de données 2 s'il peut commettre la transaction actuelle
  3. Gestionnaire de transactions Demandez à la base de données 1 de commettre
  4. Gestionnaire de transactions Demandez à la base de données 2 de commettre

    hibernate est construit sur l'API JDBC . Il coordonne simplement une base de données. Donc si vous appelez xxx

    derrière les scènes, il appelle xxx

    si vous voulez vraiment étudier les internes de la transaction, mon Les conseils sont Traitement de la transaction Java Book.


0 commentaires

5
votes

Cette question pourrait avoir des réponses à de nombreux niveaux.

Une discussion générale sur ce qui se passe peut être trouvée ici < / a>

Mon résumé va comme ça ... Tout d'abord, quelque part, il doit y avoir un coordinateur de transaction, le conteneur EJB saura sur le coordinateur - typiquement qui fait partie du serveur d'applications. Donc, tout le conteneur EJB doit faire est d'appeler xxx

c'est ça. L'API actuel Le conteneur EJB utilise est JTA . Les EJB peuvent en fait utiliser des transactions de transaction gérées de haricots ou des transactions gérées de conteneurs. Dans la case gérée des haricots, la mise en œuvre NHAS pour faire appelle les appels JTA. Plus généralement, nous utilisons des transactions gérées de conteneurs (CMT). Dans ce cas, le conteneur a une logique qui est exécuté avant que la mise en œuvre soit atteinte. Par exemple: xxx

et ultérieur, le conteneur a logique xxx

avec d'autres chemins pour abandonner la transaction si des erreurs sont arrivées. .

Maintenant que la logique est plus complexe, car les éjbs CMT sont annotés avec des relevés de contrôle des transactions. Par exemple, vous pouvez dire des choses "si nous avons déjà une transaction, utilisez-la", donc si une EJB appelle une autre seule transaction est utilisée. Lisez la spécification EJB pour cela.

Cependant, tout ce qui est assez évident dans toute rédaction de Java Ee EJBS. Je soupçonne donc que vous demandez à la MOE sur ce qui se passe intérieur les appels JTA, comment le gestionnaire de transactions est mis en œuvre et sa relation avec les gestionnaires de ressources transactionnelles (par exemple, des bases de données). C'est un énorme sujet. Vous avez réellement des implémentations du XA Protocole de transaction distribuée là-bas. Franchement, je doute que vous avez vraiment besoin de savoir cela. À un moment donné, vous avez confiance aux API que vous utilisez. Cependant, il y a un détail de la clé: votre gestionnaire de transactions (généralement le serveur d'applications lui-même) doit pouvoir indiquer aux gestionnaires de ressources le destin de toute transaction donnée et que les informations doivent survivre à la redémarrage du serveur d'applications, d'où un magasin persistant d'informations de transaction doit être conservé. Vous trouverez des journaux de transaction quelque part et, dans la configuration du serveur d'applications, vous devez vous assurer que ces journaux sont bien examinés.


5 commentaires

+1 Pour mentionner XA, comme son protocole de base habituel pour les services de transaction J2EE. Il convient également de noter que la JTA est une spécification d'interface - elle jusqu'à quelqu'un d'autre (Wbelogic, WebSphere, Oracle, JBoss, etc.) afin de fournir la mise en œuvre réelle.


Est "la mise en œuvre" la JTS? Comme je lisais sur le Net, JTA est "Spécification" comme celle de JDBC API (analogie). Dans le contexte de la JTA, j'ai lu deux termes: JTA, JTS, donc la mise en œuvre de la JTA?


Non, JTS s'inquiète de certains détails de la mise en œuvre en vertu de la JTA, à proprement parler d'une implémentation de la JTA pourraient ne pas utiliser de JTS, je vous recommande de ne pas demander l'utilisation de JTS. JTS est une mise en œuvre de la transaction Corba Spec OTS et concerne les communications entre les gestionnaires de ressources et les gestionnaires de transactions. Clairement, si l'implémentation de la JTA utilise JTS, il est probable que d'autres gestionnaires de ressources prononcent ce protocole, d'où la raison que JEE recommande son utilisation.


@djna merci pour l'info. Ensuite, qui met en œuvre JTA? Est-ce conteneur en cas d'EJB? Qu'en est-il du cadre de printemps? J'ai lu que le printemps utilise également JTA pour des transactions distribuées / globales. Je suis confus avec ceci (de nombreuses terminologies inter-liées)


Le fournisseur de conteneurs met généralement en œuvre cela. J'ai travaillé avec les personnes qui ont écrit le moteur de transaction à l'intérieur de WebSphere - ces gars comprennent vraiment ce genre de choses. Je ne sais pas assez sur le printemps pour savoir à quel point il fait lui-même. Dans des cas simples où vous n'avez pas besoin de transactions distribuées, des choses sont relativement simples. Je crois que le printemps vous permet de brancher un moteur de transaction de fournisseurs (JTA en complaisance) et, par exemple, JBoss a des Industries sur la façon de le faire. développeur.jboss.org/wiki/jbosstransactionsWithspring