Resolvendo Transações Indeterminadas
Utilize esta tarefa para resolver transações indeterminadas e as mensagens associadas a elas.
Sobre Esta Tarefa
As transações podem ficar presas no estado indeterminado indefinidamente devido a uma circunstância excepcional, como a remoção de um nó que faz com que os mecanismos do sistema de mensagens sejam destruídos. Quando uma transação torna-se indeterminada, ela deve ser confirmada ou recuperada para que o processamento normal pelo mecanismo do sistema de mensagens afetado possa continuar.
- Usando os painéis de gerenciamento de transações
- Usando métodos no mecanismo do sistema de mensagens MBean
Você deve, primeiramente, tentar resolver a transação indeterminada usando as interfaces MBean de gerenciamento de transação do servidor de aplicativos. Elas são documentadas em Gerenciando Transações Ativas e Preparadas Usando o Script wsadmin. Use os scripts para todos os servidores de aplicativos que possam estar coordenando as transações, incluindo as ações do Sistema de Mensagens, para o provedor de sistemas de mensagens padrão. Se a identidade da transação for conhecida pelos scripts do gerenciador de transações, utilize os scripts para resolver as transações. Isto resolverá consistentemente todos os recursos (incluindo Sistema de Mensagens) em uma transação global.
Se a identidade da transação não for conhecida pelos scripts do gerenciador de transações que são executados em qualquer servidor de aplicativos, ou se o servidor de aplicativos que estiver hospedando o gerenciador de transações não puder ser recuperado, será possível utilizar os métodos no MBean SIBMessagingEngine para resolver a parte de uma transação no Sistema de Mensagens independentemente da transação global. A escolha para confirmar ou recuperar a transação deve ser feita manualmente.
- 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()
para mebean em mebeans:
input=0
meName=""
print "--- Iniciar ME: -------------"
print mebean
print "-----------------------------"
while input>=0:
xidList=AdminControl.invoke(mebean , "getPreparedTransactions").splitlines()
print "--- Transações Preparadas ---"
index=0
for xid in xidList:
print " Index=%s XID=%s" % (index , xid)
index+=1
print "------- Fim da Lista --------"
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 "Nenhum índice selecionado."
else:
xid=xidList[input]
print "Digite c para confirmar ou r para recuperar o XID %s" % xid
input = sys.stdin.readline().strip()
if input=="c":
print "Confirmando o xid=%s" % xid
AdminControl.invoke(mebean , "commitPreparedTransaction" , xid)
if input=="r":
print "Recuperando o xid=%s" % xid
AdminControl.invoke(mebean , "rollbackPreparedTransaction" , xid)
imprimir
print "--- Encerrar ME ---------------"
imprimir
print "Nenhuma outra definição ME localizada, saindo"
Este script enumera as identidades das transações junto com um índice. Então, você pode selecionar um índice e consolidar ou reverter a transação correspondente àquele índice.