Aktive und vorbereitete Transaktionen mit wsadmin-Scripting verwalten

Sie können wsadmin-Scripting verwenden, um aktive und vorbereitete Transaktionen zu verwalten, die unter Umständen eine Administratoraktion erfordern.

Vorbereitende Schritte

Bevor Sie mit dieser Task beginnen, muss der wsadmin-Scripting-Client aktiv sein.

Informationen zu diesem Vorgang

[AIX Solaris HP-UX Linux Windows][IBM i]Normalerweise sollten Transaktionen automatisch ausgeführt und abgeschlossen werden (COMMIT- oder ROLLBACK-Operation), ohne dass ein Benutzereingriff erforderlich ist. Unter bestimmten Umständen kann es jedoch erforderlich sein, eine Transaktion manuell aufzulösen. Dies könnte für eine Transaktion ratsam sein, die zurückgesetzt werden soll, weil sie Aufrufe an einen Ressourcenmanager richtet, von dem Sie wissen, dass er nicht innerhalb des erforderlichen Zeitraums verfügbar sein wird.

[z/OS]Unter normalen Umständen wird alles versucht, um eine Transaktion zu beenden. Wegen der Resource Recovery Services (RRS) und der Fertigstellung nativer Kontexte ist es möglicherweise nicht möglich, die Transaktion zu beenden. In einem solchen Fall wird die Transaktion mit rollback_only markiert, damit sie im nächsten verfügbaren Fenster zurückgesetzt werden kann. Es gibt auch Fälle, in denen Sie eine Transaktion manuell beenden müssen. Dies könnte für eine Transaktion ratsam sein, die beendet werden soll, weil sie Aufrufe an einen Ressourcenmanager richtet, von dem Sie wissen, dass er nicht innerhalb des erforderlichen Zeitraums verfügbar sein wird.

Anmerkung: Wenn Sie sich entschließen, eine Transaktion auf einem Anwendungsserver zu beenden, wird die Transaktion in den Protokollen des Transaktionsservice für diesen Server als abgeschlossen protokolliert und steht somit beim Serverstart nicht für eine Wiederherstellung zur Auswahl. Wenn Sie eine Transaktion beenden, müssen Sie alle in Frage kommenden Transaktionen der betroffenen Ressourcenmanager bereinigen.

Weitere Informationen zum TransactionService und zu Transaction-MBeans finden Sie in der API-Dokumentation.

Vorgehensweise

Beispiel

Das folgende Beispielscript veranschaulicht die Verwendung der MBeans "TransactionService" und "Transaction" für manuelle Transaktionen. Führen Sie das Script nur für einen Anwendungsserver und nicht für den Deployment Manager oder Node Agent aus.

Beispiel-Jacl-Script:
# MBean "Transaction" abrufen
set servicembean [$AdminControl queryNames type=TransactionService,*]

# MBean "Transaction" abrufen
set mbean [$AdminControl queryNames type=Transaction,*]

set input 0
while {$input >= 0} {
        # die Methode listManualTransactions aufrufen
        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 " "

}
Beispiel-Jython-Script:
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

Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjta_manage_scripts
Dateiname:tjta_manage_scripts.html