• Home
  • Docker
  • Kubernetes
  • LLMs
  • Java
  • Ubuntu
  • Maven
  • Big Data
  • Archived
EJB | Transactions
  1. Introduction
  2. Annotations: @TransactionManagement, @TransactionAttribute
  3. Enums: TransactionManagementType, TransactionAttributeType
  4. Gestion des transactions

  1. Introduction
    Une transaction assure qu'une séquence d'opérations soit exécutée correctement.
    Cela implique, en cas de succès, que tous les changements reliés à ces opérations soient sauvegardés (COMMIT).
    Ou, en cas d'erreur, que tous les changements reliés à ces opérations soient annulés (ROLLBACK).
  2. Annotations: @TransactionManagement, @TransactionAttribute
    Annotations :

    • Code source (JBoss) de l'annotation @TransactionManagement :


    • Code source (JBoss) de l'annotation @TransactionAttribute :


  3. Enums: TransactionManagementType, TransactionAttributeType
    Enums :

    • Code source (JBoss) de l'enum TransactionManagementType :

      • TransactionManagementType.CONTAINER : Le container EJB s'occupe de la gestion de la transaction.

      • TransactionManagementType.BEAN : La gestion de la transaction est faite au niveau du code.


    • Code source (JBoss) de l'enum TransactionAttributeType :

      • TransactionManagementType.REQUIRED :
        La méthode invoquée doit faire partie d'une transaction.

      • TransactionManagementType.REQUIRES_NEW :
        La méthode invoquée doit faire partie d'une nouvelle transaction.

      • TransactionManagementType.SUPPORTS :
        La méthode invoquée doit faire partie d'une transaction si existante.

      • TransactionManagementType.NOT_SUPPORTED :
        La méthode invoquée ne doit pas faire partie d'une transaction.

      • TransactionManagementType.MANDATORY :
        La méthode invoquée doit faire partie d'une transaction (une exception "javax.ejb.EJBTransactionRequiredException" sera levée si une transaction n'est pas présente).

      • TransactionManagementType.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).


  4. Gestion des transactions
    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 :

© 2025  mtitek