Gestión de transacciones activas y preparadas mediante scripts wsadmin

Puede utilizar los scripts wsadmin para gestionar transacciones activas y preparadas que podrían necesitar la acción del administrador.

Antes de empezar

Antes de iniciar esta tarea, debe ejecutarse el cliente de scripts wsadmin.

Acerca de esta tarea

[AIX Solaris HP-UX Linux Windows][IBM i]En circunstancias normales, las transacciones deberían ejecutarse y finalizar (confirmarse o retrotraerse) automáticamente, sin que tenga que intervenir. No obstante, en algunas circunstancias, es posible que tenga que resolver las transacciones manualmente. Por ejemplo, puede retrotraer una transacción que se ha atascado al sondear un gestor de recursos que sabe que no volverá a estar disponible dentro de la franja de tiempo necesaria.

[z/OS]En circunstancias normales, se realizan todos los esfuerzos necesarios para finalizar la transacción. No obstante, debido a la terminación de contextos nativos y los servicios de recuperación de recursos (RRS), es posible que no se pueda finalizar la transacción. En este caso, se marca la transacción como rollback_only de modo que se retrotraiga en la siguiente ventana disponible. En otras situaciones, es posible que necesite finalizar las transacciones manualmente. Por ejemplo, es posible que desee finalizar una transacción que se ha atascado al sondear un gestor de recursos que sabe que no volverá a estar disponible dentro de la franja de tiempo necesaria.

Nota: Si determina completar una transacción en un servidor de aplicaciones, se grabará como finalizada en los archivos de registros cronológicos del servicio de transacciones de ese servidor, por lo tanto, no se puede elegir para recuperación durante el arranque del servidor. Si completa una transacción, deberá borrar cualquier transacción dudosa en los gestores de recursos afectados.

Para obtener más información sobre los MBeans TransactionService y Transaction, consulte la documentación de la interfaz de programación de aplicaciones (API).

Procedimiento

Ejemplo

El siguiente script es un ejemplo de cómo se utilizan los MBean TransactionService y Transaction en transacciones manuales. Ejecute el script sólo en un servidor de aplicaciones y no en el gestor de despliegue ni en el agente de nodos.

Ejemplo de script con 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 ""

}
Ejemplo de script con 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

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjta_manage_scripts
File name: tjta_manage_scripts.html