Quand @TransactionAttribute (TransactionAttributeType.REQUIRES NEW) commit?

une méthode EJB appelée Aby appelle une autre méthode EJB appelée Bob

Bob est marqué avec @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)

quand la transaction bob se produit-elle?:

a) quand bob fin de l'invocation

B) quand aby fin de l'invocation

c) autres. quand?

28
demandé sur Buhake Sindi 2012-07-23 18:17:16

2 réponses

je pense que A est juste. Lorsque la méthode Bob est appelée, elle crée une nouvelle transaction pour elle et la méthode Aby est suspendue jusqu'à ce que la transaction Bob est engagée.

aussi noter qu'il doit être Méthode d'un autre haricot pour le rendre transactionnel, les méthodes appelées du même haricot n'agissent pas comme des méthodes d'affaires.

Voir cette grande article pour plus d'explications.

35
répondu Petr Mensik 2013-07-16 05:37:49

en fait, je pense que l'alternative a est correcte. Voir:

EJB 3.0 - opération imbriquée != Nécessite De Nouvelles?

j'ai aussi fait quelques recherches et j'ai regardé dans les logs db (Hyper Sonic) pour voir réellement quand il est engagé dans la db et quand il est engagé quand la méthode REQUIRES_NEW est terminée. Mais comme c'est au conteneur de gérer les transactions peut-être il pourrait changer en fonction du conteneur. J'ai utilisé JBoss pendant le débogage. Et hibernent (cela vaut la peine de mentionner puisque je l'ai testé en vérifiant les journaux db). Je suppose qu'une écriture de base de données est impliqué puisque vous posez des questions sur les transactions.

mes pensées diffèrent de la réponse précédente de sorte qu'il serait amusant d'être persuadé.

5
répondu Mike 2017-05-23 12:10:09