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