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 :

Un peu d'explications sur les transactions


Sujet :

Java EE

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 179
    Par défaut Un peu d'explications sur les transactions
    Bonjour,

    J'ai un soucis de compréhension sur les transactions et les EJBs.

    En gros j'ai ceci :

    1 EJB stateFul que je nomme SFB
    1 EJB stateless que je nomme SLB

    j'appelle depuis SFB la méthode SLB.methode() laquelle méthode envoie plusieurs messages JMS. Je recois pas ces messages en asynchrone, ils arrivent tous ensembles du au fait que par défaut les transactions d'un EJB sont en TransactionAttributeType.REQUIRED.

    Pour pallier à ce comportement, j'ai crée une fonction envoieMessage() permettant d'envoyer les messages JMS en transaction TransactionAttributeType.REQUIRES_NEW. Cette fonction est appelée depuis SLB.methode().

    Sur le moment j'ai pensé que ça allait résoudre mon problème mais ça a rien changé...

    En définitive, j'ai changé le mode de transaction de SLB.methode() en TransactionAttributeType.REQUIRES_NEW et là...ça marche...


    Pour résumer les modes de transactions :

    cas 1:

    SFB -> TransactionAttributeType.REQUIRED
    SLB.methode() -> TransactionAttributeType.REQUIRED
    SLB.envoieMessage() -> TransactionAttributeType.REQUIRES_NEW

    -> les messages n'arrivent pas en asynchrone


    cas 2:

    SFB -> TransactionAttributeType.REQUIRED
    SLB.methode() -> TransactionAttributeType.REQUIRES_NEW
    SLB.envoieMessage() -> TransactionAttributeType.REQUIRES_NEW

    -> les messages arrivent bien en asynchrone

    Qui peut m'expliquer ce comportement svp ? Je m'attendais pour ma part à recevoir en asynchrone les messages pour le cas de figure 1.

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 179
    Par défaut
    ok, j'ai finalement trouvé ce qui ne va pas.

    Il s'agit en fait d'un problème d'isolation de ressource je pense entre la transaction REQUIRED et la transaction REQUIRED_NEW.

    Comme elles partagent des resources (@Resource) identiques, il n'est apparemment pas possible d'utiliser REQUIRED et REQUIRED_NEW ensemble. Dans mon cas de figure, les resources JMS sont utilisées uniquement pour la fonction nécessitant REQUIRED_NEW mais sont situées dans le même EJB que la fonction en transaction REQUIRED ce qui pose problème.

    Si j'externalise ma fonction JMS dans un autre EJB, ca marche. J'ai fais le test en passant en argument mes ressources JMS entre les 2 EJB et ça ne marche plus.

    En espérant que ca serve à quelqu'un

Discussions similaires

  1. Besoin d'explications sur les charset
    Par EGPMS dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 03/02/2006, 15h38
  2. [RegEx] preg_replace : explications sur les caractères spéciaux
    Par Anduriel dans le forum Langage
    Réponses: 6
    Dernier message: 05/10/2005, 21h35
  3. question sur les transactions
    Par vbcasimir dans le forum Débuter
    Réponses: 3
    Dernier message: 07/06/2005, 10h15
  4. petite aide sur les transactions et triggers SVP
    Par CharleLéo dans le forum Débuter
    Réponses: 4
    Dernier message: 15/11/2004, 20h43
  5. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 22h18

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