Bonsoir à vous,
Je souhaiterais avoir plus d'explications sur les annotations de transaction dans les EJB, à savoir quand et comment on les utilise, au niveau de la classe avec :
- TransactionManagementType.CONTAINER (valeur par défaut)
- TransactionManagementType.BEAN
et au niveau de la méthode :
- TransactionAttributeType.MANDATORY
- TransactionAttributeType.REQUIRED (valeur par défaut)
- TransactionAttributeType.REQUIRED_NEW
- TransactionAttributeType.SUPPORTS
- TransactionAttributeType.NOT_SUPPORTED
- TransactionAttributeType.NEVER
J'ai compris que l'annotation @TransactionAttribute peut prendre différentes valeurs
- NOT_SUPPORTED : suspend la propagation de la transaction aux traitements de la méthode et des appels aux autres EJB de ces traitements. Une éventuelle transaction démarrée avant l'appel d'une méthode marquée avec cet attribut est suspendue jusqu'à la sortie de la méthode.
- SUPPORTS : la méthode est incluse dans une éventuelle transaction démarrée avant son appel. Cet attribut permet à la méthode d'être incluse ou non dans une transaction.
- REQUIRED : la méthode doit obligatoirement être incluse dans une transaction. Si une transaction est démarrée avant l'appel de cette méthode, alors la méthode est incluse dans la portée de la transaction. Si aucune transaction n'est définie à l'appel de la méthode, le conteneur va créer une nouvelle transaction dont la portée concernera les traitements de la méthode et les appels aux EJB de ces traitements. La transaction prend fin à la sortie de la méthode (valeur par défaut lorsque l'annotation n'est pas utilisée ou définie dans le fichier de déploiement)
- REQUIRES_NEW : une nouvelle transaction est systématiquement démarrée même si une transaction est démarrée lors de l'appel de la méthode. Dans ce cas, la transaction existante est suspendue jusqu'à la fin de l'exécution de la méthode.
- MANDATORY : la méthode doit obligatoirement être incluse dans la portée d'une transaction existante avant son appel. Aucune transaction ne sera créée et elle doit obligatoirement être fournie par le client appelant. L'appel de la méthode non incluse dans la portée d'une transaction lève une exception de type javax.ejb.EJBTransactionRequiredException.
- NEVER : la méthode ne doit jamais être appelée dans la portée d'une transaction. Si c'est le cas, une exception de type EJBException est levée
Mais j'ai encore du mal à saisir les cas d'utilisation.........quand vaut il mieux utiliser telle annotations ou l'autre. Je travaille avec des EJB qui font appels à des Webservices, et sur le projet, on veut optimiser les temps de réponses en utilisant les annotations.
Chaque EJB contient plusieurs méthodes de style : GET / ADD / UPDATE etc.... et certains font appels à d'autres méthodes dedans !
Si quelqu'un peut m'expliquer plus en détails les annotations.....J'ai vu qu'il est fortement recommandé d'utiliser un contexte de persistance (EntityManager) dans la portée d'une transaction afin de s'assurer que tous les accès à la base de données se font dans un contexte transactionnel. Ceci implique d'utiliser les attributs de transaction Required, Required_New ou Mandatory.
Un EJB de type Message Driven ne peut utiliser que les attributs de transaction NotSupported et Required. L'attribut NotSupported précise que les messages ne seront pas traités dans une transaction. L'attribut Required précise que les messages seront traités dans une transaction créée par le conteneur.
Il n'est pas possible d'utiliser l'attribut Mandatory avec un EJB qui est proposé sous la forme d'un service web.
La gestion des attributs de transaction est importante car l'utilisation d'un EJB dans un contexte transactionnel est coûteux en ressources. Il faut bien tenir compte du fait que la valeur par défaut des attributs de transaction est utilisée si aucun attribut n'est précisé et que cet attribut par défaut est REQUIRED, ce qui place automatiquement l'EJB dans un contexte transactionnel.
Il est donc fortement recommandé d'utiliser un attribut de transaction NotSupported lorsqu'aucune transaction n'est requise.
Merci pour vos explications et votre aide.
Partager