web-dev-qa-db-fra.com

Quand @TransactionAttribute (TransactionAttributeType.REQUIRES_NEW) est-il validé?

Une méthode EJB nommée Aby appelle une autre méthode EJB nommée Bob

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

Quand la transaction bob est-elle validée?:

a) lorsque bob l'invocation se termine

b) lorsque aby l'invocation se termine

c) autre. quand?

29
SDReyes

Je pense que A a raison. 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 soit validée.

Notez également qu'il doit s'agir d'une méthode provenant d'un autre bean pour le rendre transactionnel, les méthodes appelées à partir du même bean n'agissent pas en tant que méthodes métier.

Voir ce grand article pour plus d'explications.

37
Petr Mensik

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

EJB 3.0 - Transaction imbriquée! = Nécessite une nouvelle?

J'ai également effectué des recherches et examiné les journaux db (Hyper Sonic) pour voir réellement quand il est validé dans la base de données et quand la méthode REQUIRES_NEW est terminée. Mais comme c'est au conteneur de gérer les transactions, cela peut changer en fonction du conteneur. J'ai utilisé JBoss lors du débogage. Et Hibernate (mérite d'être mentionné car j'ai testé cela en vérifiant les journaux de la base de données). Je suppose qu'une écriture de base de données est impliquée puisque vous posez des questions sur les transactions.

Mes pensées diffèrent de la réponse précédente, donc ce serait amusant d'être convaincu.

6
Mike