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.
- à l'aide des panneaux de gestion des transactions du serveur,
- à 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.
- getPreparedTransactions()
- commitPreparedTransaction(String xid)
- rollbackPreparedTransaction(String xid)
wsadmin>AdminControl.invoke(AdminControl.queryNames("type=SIBMessagingEngine,*").
splitlines()[0] , "getPreparedTransactions")
![[IBM i]](../images/iseries.gif)
![[IBM i]](../images/iseries.gif)
![[IBM i]](../images/iseries.gif)
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.