Résolution de transactions en attente de validation

Utilisez cette tâche pour résoudre des transactions en attente de validation et les messages qui leur sont associés.

Pourquoi et quand exécuter cette tâche

Les transactions peuvent se bloquer indéfiniment en attente de validation en raison d'une circonstance exceptionnelle comme la suppression d'un noeud détruisant des moteurs de messagerie. Lorsqu'une transaction passe en attente de validation, elle doit être validée ou annulée afin que le traitement normal par le moteur de messagerie affecté se poursuive.

La console d'administration permet d'afficher les messages à l'origine de l'incident (Voir Affichage de la liste des messages sur un point de message). Si des messages sont impliqués dans une transaction en attente de validation, l'identité de cette transaction est affiché dans un panneau associé aux messages. Vous pouvez alors résoudre la transaction de deux manières :
  1. à l'aide des panneaux de gestion des transactions du serveur,
  2. à l'aide des méthodes du MBean du moteur de messagerie.

Vous devez préalablement tenter de résoudre la transaction en attente en utilisant les interfaces MBean de gestion des transactions du serveur d'applications. Elles sont documentées dans Gestion des transactions actives et préparées à l'aide de l'outil de script wsadmin. Utilisez les scripts pour tous les serveurs d'applications qui peuvent avoir coordonné des transactions, y compris des actions de messagerie, pour le fournisseur de messagerie par défaut. Si l'identité de transaction est connue des scripts du gestionnaire de transactions, utilisez ces scripts pour résoudre les transactions. Toutes les ressources (y compris Messagerie) seront ainsi résolues de manière cohérente dans une transaction globale.

Si l'identité de transaction n'est pas connue des scripts du gestionnaire de transactions exécutés sur un serveur d'applications ou que le serveur d'applications qui héberge le gestionnaire de transactions ne peut pas être récupéré, il est possible d'utiliser les méthodes du bean géré par messages SIBMessagingEngine pour résoudre la partie Messagerie d'une transaction indépendamment de la transaction globale. Le choix de valider ou d'annuler la transaction doit être effectué manuellement.

Les méthodes suivantes du MBean du moteur de messagerie permettent d'obtenir la liste des identités de transaction (xid) et de valider ou d'annuler les transactions :
  • getPreparedTransactions()
  • commitPreparedTransaction(String xid)
  • rollbackPreparedTransaction(String xid)
Pour appeler ces méthodes, vous pouvez utiliser une commande wsadmin. Par exemple, une commande de la forme suivante permet d'obtenir la liste des identités des transactions en attente de validation à partir du MBean d'un moteur de messagerie :
wsadmin>AdminControl.invoke(AdminControl.queryNames("type=SIBMessagingEngine,*").
splitlines()[0] , "getPreparedTransactions")
[IBM i]Remarque : [IBM i]Le client de scriptage wsadmin est exécuté à partir de Qshell. [IBM i]Pour plus d'informations, voir Configuration de Qshell pour exécuter des scripts WebSphere à l'aide de l'outil de scriptage wsadmin.
Vous pouvez également utiliser un script tel que le script suivant pour appeler les méthodes du MBean :
import sys

mebeans=AdminControl.queryNames("type=SIBMessagingEngine,*").splitlines()

for mebean in mebeans:
  input=0
  meName=""
  print "--- Start ME: ---------------"
  print mebean
  print "-----------------------------"
  while input>=0:
    xidList=AdminControl.invoke(mebean , "getPreparedTransactions").splitlines()
    print "--- Prepared Transactions ---"
    index=0
    for xid in xidList:
      print "  Index=%s XID=%s" % (index , xid)
      index+=1
    print "------- End of list ---------"
    print "Select index of XID to commit/rollback"
    print "(or enter -1 to skip to next ME):"
    input=int(sys.stdin.readline().strip())

    if input<0:
      print "No index selected."
    else:
      xid=xidList[input]
      print "Enter c to commit or r to rollback XID %s" % xid
      input=sys.stdin.readline().strip()
      if input=="c":
        print "Committing xid=%s" % xid
        AdminControl.invoke(mebean , "commitPreparedTransaction" , xid)
      if input=="r":
        print "Rolling back xid=%s" % xid
        AdminControl.invoke(mebean , "rollbackPreparedTransaction" , xid)
    print
  print "--- End ME --------------------"
  print

print "No more ME definitions found, exiting"

Ce script répertorie les identités des transactions avec un index. Vous pouvez sélectionner un index et valider ou annuler la transaction correspondante.

Procédure

  1. Utilisez la console d'administration pour rechercher l'identité de la transaction des messages qui ont des transactions en attente de validation.
  2. Facultatif : Si une identité de transaction apparaît dans le panneau de gestion des transactions, validez ou annulez les transactions si nécessaire.
  3. Facultatif : Si aucune identité de transaction n'apparaît dans le panneau de gestion des transactions, utilisez les méthodes du MBean du moteur de messagerie. Par exemple, utilisez un script pour afficher la liste des identités de transactions en attente de validation. Pour chaque transaction :
    1. Entrez l'index de l'identité de la transaction.
    2. Facultatif : Entrez c pour valider la transaction.
    3. Facultatif : Entrez r pour annuler la transaction.
  4. Pour vérifier que les transactions ne sont plus en attente de validation, redémarrez le serveur et utilisez le panneau de gestion des transactions ou des méthodes du MBean du moteur de messagerie à vérifier.

Icône indiquant le type de rubrique Rubrique de tâche



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=tjm0165_
Nom du fichier : tjm0165_.html