IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java EE Discussion :

Transactions avec l'annotation dans les EJB


Sujet :

Java EE

  1. #1
    Membre régulier Avatar de silverfab34
    Inscrit en
    Mars 2006
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2006
    Messages : 203
    Points : 91
    Points
    91
    Par défaut Transactions avec l'annotation dans les EJB
    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.

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 241
    Points : 399
    Points
    399
    Par défaut
    Bonjour,

    Sans vouloir t'offenser, j'ai eu du mal à trouver les questions dans ton message.

    Il faut considérer le fonctionnement de ton applications sous un angle "traitement transactionnel".
    Il faut commencer par délimiter les bornes de tes transactions.
    Où est initiée la transaction? Comment se passe le cas d'annulation ( rollback ) ?
    Mes traitements doivent-ils agir dans des contextes transactionnels distincts/parallèles? Est-ce que les ressources ( au sens JEE, tels une DataSource ou une ConnectionFactory par exemple, voire également des adapteur de resources ) fonctionnent dans un cadre transactionnel?

    Une fois que tu auras "cartographié" les enchainements de tes traitements, et le comportement transactionnel attendu pour chacun, alors tu pourras placer l'annotation appropriée.

    Bon courage,
    Sébastien

Discussions similaires

  1. Gestion des transactions dans les EJB
    Par casho dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 07/10/2010, 10h07
  2. Réponses: 5
    Dernier message: 08/12/2008, 12h19
  3. Problème avec "Java Search" dans les JSP
    Par B@tman dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 08/01/2008, 11h57
  4. Annotations dans les commentaires du code.
    Par Pierre8r dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 13/09/2007, 17h12
  5. JTable avec des JPanel dans les cellule
    Par pigpen dans le forum Composants
    Réponses: 11
    Dernier message: 13/04/2006, 19h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo