Gestion des transactions actives et préparées à l'aide de l'outil de script wsadmin

Vous pouvez utiliser l'outil de script wsadmin pour gérer des transactions actives et préparées demandant une éventuelle intervention de l'administrateur.

Avant de commencer

Avant de commencer cette tâche, le client de script wsadmin doit être en cours d'exécution.

Pourquoi et quand exécuter cette tâche

[AIX Solaris HP-UX Linux Windows][IBM i]Dans des circonstances normales, les transactions s'exécutent et se terminent (validation ou annulation) automatiquement, sans que vous n'ayez besoin d'intervenir. Toutefois, dans certains cas, vous devez éventuellement résoudre manuellement une transaction. Par exemple, vous pouvez décider d'annuler une transaction qui s'est bloquée en interrogeant un gestionnaire de ressources dont vous savez, qu'il ne sera pas à nouveau disponible dans les délais requis.

[z/OS]Dans des circonstances normales, il faut s'efforcer de terminer une transaction. Toutefois, à cause des RRS (Recovery Services) et des contextes natifs en train de terminer, vous pouvez être dans l'impossibilité de terminer une transaction. Dans ce cas, la transaction est marquée en rollback_only (annulation seule) pour pouvoir être annulée à la prochaine fenêtre disponible. Dans d'autres cas, vous devez mettre fin manuellement à une transaction. Par exemple, vous pouvez décider d'arrêter une transaction qui s'est bloquée en interrogeant un gestionnaire de ressources dont vous savez, qu'il ne sera pas à nouveau disponible dans les délais requis.

Remarque : Si vous décidez de mettre fin à une transaction sur un serveur d'applications, elle est enregistrée comme achevée dans les journaux du service de transaction pour ce serveur et ne peut donc pas être choisie pour reprise au démarrage du serveur. Si vous terminez une transaction, vous êtes tenu de nettoyer toute transaction en attente de validation sur les gestionnaires de ressources concernés.

Pour plus d'informations concernant les MBeans TransactionService et Transaction, voir la documentation sur l'API (Application Programming Interface).

Procédure

Exemple

Le script suivant est un exemple d'utilisation des MBeans TransactionService et Transaction pour gérer les transactions manuelles. Exécutez le script uniquement sur un serveur d'applications, et non sur le gestionnaire de déploiement ou l'agent de noeud.

Exemple de script en langage Jacl :
# get the TransactionService MBean
set servicembean [$AdminControl queryNames type=TransactionService,*]

# get the Transaction MBean
set mbean [$AdminControl queryNames type=Transaction,*]

set input 0
while {$input >= 0} {
        # invoke the listManualTransactions method
        set tranManualList [$AdminControl invoke $servicembean listManualTransactions]

        if {[llength $tranManualList] > 0} {
                puts "----Manual Transaction details---------------"
                set index 0
                foreach tran $tranManualList {
                        puts "   Index= $index tran= $tran"
                        incr index
                }
                puts "----End of Manual Transactions ---------------"
                puts "Select index of transaction to commit/rollback:"
                set input [gets stdin]
                if {$input < 0} {
                        puts "No index selected, exiting."
                } else {
                        set tran [lindex $tranManualList $input]
                        set commaPos [expr [string first "," $tran ]-1]
                        set localTID [string range $tran 0 $commaPos]
                        puts "Enter c to commit or r to rollback Transaction $localTID"
                        set input [gets stdin]
                        if {$input=="c"} {
                                puts "Committing transaction=$localTID"
                                $AdminControl invoke $mbean commit $localTID
                        }
                        if {$input=="r"} {
                                puts "Rolling back transaction=$localTID"
                                $AdminControl invoke $mbean rollback $localTID
                        }
                }
        } else {
                puts "No Manual transactions found, exiting"
                set input -1
        }
        puts " "

}
Exemple de script en langage Jython :
import sys
def wsadminToList(inStr):
        outList=[]
        if (len(inStr)>0 and inStr[0]=='[' and inStr[-1]==']'):
                tmpList = inStr[1:-1].split(" ")
        else:
                tmpList = inStr.split("\n")  #splits for Windows or Linux
        for item in tmpList:
                item = item.rstrip();        #removes any Windows "\r"
                if (len(item)>0):
                        outList.append(item)
        return outList
#endDef

servicembean = AdminControl.queryNames("type=TransactionService,*" )
mbean = AdminControl.queryNames("type=Transaction,*" )
input = 0

while (input >= 0):
        tranList = wsadminToList(AdminControl.invoke(servicembean, "listManualTransactions" ))

        tranLength = len(tranList) 
        if (tranLength > 0):
                print "----Manual Transaction details---------------"
                index = 0
                for tran in tranList:
                        print "   Index=" , index , " tran=" , tran
                        index = index+1
                #endFor 
                print "----End of Manual Transactions ---------------"
                print "Select index of transaction to commit/rollback:"
                input = sys.stdin.readline().strip()
                if (input == ""):
                        print "No index selected, exiting."
                        input = -1
                else:
                        tran = tranList[int(input)]
                        commaPos = (tran.find(",") -1)
                        localTID = tran[0:commaPos+1]
                        print "Enter c to commit or r to rollback transaction ", localTID
                        input = sys.stdin.readline().strip()
                        if (input == "c"):
                                print "Committing transaction=", localTID
                                AdminControl.invoke(mbean, "commit", localTID )
                        #endIf 
                        elif (input == "r"):
                                print "Rolling back transaction=", localTID
                                AdminControl.invoke(mbean, "rollback", localTID )
                        #endIf 
                        else:
                                input = -1
                        #endelse
                #endElse 
        else:
                print "No transactions found, exiting"
                input = -1
        #endElse 
        print " "

#endWhile

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