Par défaut, Le container EJB s'occupe de la gestion des transactions pour les session beans et les MDBs.
Une transaction a des frontières qui délimitent son début et sa fin. Le container EJB contrôle les frontières de la transaction en se basant sur les paramètres de configurations.
Par défaut, lors de l'invocation d'une méthode, le container EJB vérifie si une transaction est associée au thread courant :
-
Si aucune transaction n'est disponible, le container EJB commence une nouvelle transaction avant d'invoquer la méthode.
-
Si une transaction est disponible, le container EJB propage la transaction et la rend disponible au code de la méthode invoquée.
Au retour de l'appel de la méthode :
-
Si la transaction a été créée par le container EJB au moment de l'invocation de la méthode, alors un commit sera exécuté.
-
Au cas contraire, l'exécution du code continue sans que la transaction soit affectée.
Il y a six configurations ("
TransactionManagementType
") qui affectent le comportement du container EJB par rapport a la gestion des transactions :
-
"
REQUIRED
"
Lors de l'invocation d'une méthode, le container EJB vérifie si une transaction est associée au thread courant :
-
Si aucune transaction n'est disponible, le container EJB commence une nouvelle transaction avant d'invoquer la méthode
(un commit sera exécutée automatiquement à la fin d'exécution de la méthode).
-
Si une transaction est disponible, le container EJB propage la transaction et la rend disponible au code de la méthode invoquée.
-
"
REQUIRES_NEW
"
Lors de l'invocation d'une méthode, le container EJB vérifie si une transaction est associée au thread courant :
-
Si aucune transaction n'est disponible, le container EJB commence une nouvelle transaction avant d'invoquer la méthode
(un commit sera exécutée automatiquement à la fin d'exécution de la méthode).
-
Si une transaction est disponible, le container EJB suspend la transaction courante et commence une nouvelle transaction avant d'invoquer la méthode
(un commit sera exécutée automatiquement à la fin d'exécution de la méthode).
-
"
SUPPORTS
"
Lors de l'invocation d'une méthode, le container EJB vérifie si une transaction est associée au thread courant :
-
Si aucune transaction n'est disponible, la méthode sera exécutée sans aucun contexte transactionnel.
-
Si une transaction est disponible, le container EJB propage la transaction et la rend disponible au code de la méthode invoquée.
-
"
NOT_SUPPORTED
"
Lors de l'invocation d'une méthode, le container EJB vérifie si une transaction est associée au thread courant :
-
Si aucune transaction n'est disponible, la méthode sera exécutée sans aucun contexte transactionnel.
-
Si une transaction est disponible, le container EJB suspend la transaction courante et exécute la méthode en d'hors du contexte transactionnel.
-
"
MANDATORY
"
Une transaction doit être présente au moment de l'invocation de la méthode.
Une exception "javax.ejb.EJBTransactionRequiredException
" sera levée si une transaction n'est pas présente.
-
"
NEVER
"
La méthode invoquée ne doit pas faire partie d'une transaction.
Une exception "javax.ejb.EJBException
" sera levée si une transaction est présente.
Exemples :