Par défaut EJB mode de transaction pour les méthodes asynchrones?
-
Quand j'ai un
@Asynchronous
méthode d'un EJB, et je ne spécifiez pas le@TransactionAttribute
, alors, comment fonctionne exactement la poignée du récipient de la transaction limites? De toute évidence, il ne peut pas utiliser le thread appelant transaction, de sorte que fait-il? -
Même question, mais en ce qui concerne les méthodes qui sont déclenchés par le TimerService.
EDIT: je pense que j'ai formulée que mal. Je sais déjà que le mode par défaut est "OBLIGATOIRE". Il devrait donc être sûr de supposer que ces méthodes sera toujours à l'intérieur d'une transaction. Mais ma question est, quel est l'opération du cycle de vie ressemble? Le conteneur de créer une nouvelle opération pour chaque appel? Ou faut-il ré-utiliser la même opération pour tous les appels sur un asynchrones thread de travail? Si c'est le dernier, puis lors de la transaction être fermés?
Vous devez vous connecter pour publier un commentaire.
Similaire à un fichier MDB la transaction est démarrée par le conteneur, juste avant votre
@Asynchronous
,@Schedule
ou@Timeout
méthode (et applicable intercepteurs) est appelée en fait et commis juste après la méthode (et intercepteurs) complète.Comme à l'habitude, la transaction se propage à tous les haricots appelé dans ladite méthode et tous les haricots ces haricots appel, de manière récursive. Bien entendu, d'autres haricots invoquées sont les bienvenus pour modifier la sémantique de transaction de leur méthode d'appel à l'aide de la spécification d'autres
@TransactionAttribute
paramètres (direREQUIRES_NEW
, ouNOT_SUPPORTED
).Note de côté, les transactions ne sont jamais propagé aux haricots avec
@TransactionManagement(BEAN)
. Le conteneur toujours suspendre toute opération en cours avant d'appeler une méthode d'un Bean Géré par Transaction bean.De EJB 3.1 spec.