Beans gérés par message - Traitement des transactions avec le bus d'intégration de services

Dans le cadre d'une transaction, les beans gérés par messages peuvent traiter les messages sur les destinations (ou points de contact) dans la portée d'une transaction.

Il existe trois cas de figure, suivant les réglages choisis dans le descripteur de déploiement du bean de message : transaction gérée par le conteneur (obligatoire), transaction gérée par le conteneur (non prise en charge) et transaction gérée par le bean.

Dans le descripteur de déploiement d'un bean de message, vous pouvez choisir si le bean gère lui-même ses propres transactions ou si le conteneur gère les transactions pour le compte du bean. Pour des informations sur les paramètres de descripteur de déploiement des beans gérés par message, voir les attributs de descripteur de déploiement des beans gérés par message. Si vous optez pour la gestion des transactions par le conteneur, dans le bloc-notes du descripteur de déploiement, vous pouvez sélectionner, pour chaque méthode du bean, un type de transaction indiquant si la gestion par le conteneur est obligatoire ou non prise en charge. La valeur par défaut est Transaction gérée par conteneur (obligatoire).

Transaction gérée par conteneur (obligatoire)

Dans ce cas, le serveur d'applications démarre une transaction globale avant de lire les messages entrants depuis la destination et avant qu'il n'appelle la méthode onMessage() du bean de message. Cela signifie que d'autres EJB appelés à leur tour par le message et que les interactions avec les ressources telles que les bases de données peuvent être sectorisés dans cette même transaction globale ayant obtenu le message entrant.

Si ce flux d'application réussit, la transaction globale est validée. Dans le cas contraire (si la transaction est marquée pour annulation ou si une erreur d'exécution se produit), la transaction est annulée et le message entrant est à son tour annulé sur la destination du bean de message.

Transaction gérée par conteneur (non prise en charge)

Dans ce cas, il n'y a pas de transaction globale, mais le fournisseur JMS peut toujours livrer un message d'une destination de bean de message au serveur d'applications dans une unité de travail. Cette dernière peut être considérée comme une transaction locale, car aucune autre ressource n'est impliquée dans sa portée transactionnelle.

Le serveur d'applications accuse réception du message lorsque la distribution de l'appel onMessage() réussit sur le bean de message (à l'aide du mode de reconnaissance indiqué par l'assembleur du bean de message).

Le serveur d'applications n'accuse toutefois pas réception si une exception d'exécution non contrôlée est lancée depuis la méthode onMessage(). Le message est-il donc annulé sur la destination du bean de message (ou a-t-il été acquitté et supprimé ) ?

La réponse varie selon qu'un point de synchronisation est utilisé ou non par le fournisseur JMS et suivant la plateforme d'exploitation utilisée (le comportement de la plateforme d'exploitation z/OS peut en particulier entraîner un autre comportement).

Si votre fournisseur JMS MQ établit un point de synchronisation autour de la consommation du message par le bean de message dans ce cas de transaction gérée par conteneur (non prise en charge), le message est annulé sur la destination après une exception non contrôlée.

Si aucun point de synchronisation n'est utilisé, le message est supprimé de la destination après une exception non contrôlée.

Pour plus d'informations à ce sujet, voir la note technique "MDB behavior is different on z/OS than on distributed when getting nonpersistent messages within syncpoint" sur http://www.ibm.com/support/docview.wss?uid=swg21231549.

Transaction gérée par bean

Dans cette situation, l'action est identique à celle de la transaction gérée par conteneur (non prise en charge). Bien qu'une transaction utilisateur puisse intervenir dans ce cas, si elle a lieu pendant la distribution de l'appel onMessage() du bean de message, elle n'inclut pas la consommation du message depuis la destination du bean dans la portée de la transaction. Pour cela, utilisez le scénario transaction gérée par conteneur (obligatoire).


Icône indiquant le type de rubrique Rubrique de concept



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cmb_trans_sib
Nom du fichier : cmb_trans_sib.html