Gerenciando Transações Ativas e Preparadas Usando o Script wsadmin

É possível usar o script wsadmin para gerenciar transações ativas e preparadas que podem precisar de ação do administrador.

Antes de Iniciar

Antes de iniciar esta tarefa, o cliente de script wsadmin deve estar em execução.

Sobre Esta Tarefa

[AIX Solaris HP-UX Linux Windows][IBM i]Em circunstâncias normais, as transações devem ser executadas e concluídas (confirmadas ou recuperadas) automaticamente, sem a necessidade de intervenção. No entanto, em algumas circunstâncias, pode ser necessário resolver uma transação manualmente. Por exemplo, é possível retroceder uma transação que ficou bloqueada durante a sondagem de um gerenciador de recursos que você sabe que não ficará disponível novamente no intervalo de tempo necessário.

[z/OS]Em circunstâncias normais, todo esforço será feito para concluir uma transação. No entanto, devido à conclusão de Resource Recovery Services (RRS) e de contextos nativos, pode não ser possível concluir a transação. Neste caso, a transação é marcada como rollback_only para que seja retrocedida na próxima janela disponível. Em outras situações, pode ser necessário concluir uma transação manualmente. Por exemplo, é possível concluir uma transação que ficou bloqueada durante a sondagem de um gerenciador de recursos que você sabe que não ficará disponível novamente no intervalo de tempo necessário.

Nota: Se você optar por concluir uma transação em um servidor de aplicativos, ela será registrada como tendo sido concluída nos logs de serviço de transação daquele servidor, portanto não será elegível para recuperação durante a inicialização do servidor. Se você concluir uma transação, será responsável por limpar todas as transações duvidosas nos gerenciadores de recursos afetados.

Para obter informações adicionais sobre os MBeans TransactionService e Transaction, consulte a documentação da interface de programação de aplicativos (API).

Procedimento

Exemplo

O script a seguir é um exemplo de como usar os MBeans TransactionService e Transaction para trabalhar com transações manuais. Execute o script apenas em um servidor de aplicativos e não no gerenciador de implementação ou no agente do nó.

Script Jacl de exemplo:
# get the TransactionService MBean
set servicembean [$AdminControl queryNames type=TransactionService,*]

# obter o MBean Transaction
set mbean [$AdminControl queryNames type=Transaction,*]

set input 0
while {$input >= 0} {
        # chamar o método listManualTransactions
        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 " "

}
Script Jython de exemplo:
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 para Windows ou Linux
        for item in tmpList:
                item = item.rstrip();       #remove todo "\r" do Windows
                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

Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjta_manage_scripts
Nome do arquivo: tjta_manage_scripts.html