Resolución de transacciones dudosas
Utilice esta tarea para resolver transacciones dudosas y los mensajes asociados a las mismas.
Acerca de esta tarea
Las transacciones se podrían quedar estancadas en estado dudoso indefinidamente debido a una circunstancia excepcional como la supresión de un nodo que ocasiona que se destruyan los motores de mensajería. Cuando una transacción pasa a ser dudosa, se debe confirmar o retrotraer para que el proceso normal realizado por el motor de mensajería afectado pueda continuar.
- A través de los paneles de gestión de transacciones del servidor
- A través de los métodos del MBean del motor de mensajería
En primer lugar, debe intentar resolver la transacción dudosa utilizando las interfaces MBean de gestión de transacciones del servidor de aplicaciones. Éstas se documentan en Gestión de transacciones activas y preparadas mediante scripts wsadmin. Utilice los scripts para todos los servidores de aplicaciones que hayan podido coordinar transacciones, incluidas las acciones de mensajería, para el proveedor de mensajería predeterminado. Si los scripts del gestor de transacciones conocen la identidad de las transacciones, utilice estos scripts para resolver las transacciones. De esta manera, se resolverán sistemáticamente todos los recursos (incluida la mensajería) dentro de una transacción global.
Si los scripts del gestor de transacciones que se ejecutan en un servidor de aplicaciones no conocen la identidad de las transacciones, o si el servidor de aplicaciones que aloja el gestor de transacciones no puede recuperarse, es posible utilizar los métodos del MBean SIBMessagingEngine para resolver la parte de mensajería de una transacción independientemente de la transacción global. La opción de comprometer o retrotraer la transacción debe realizarse 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()
for mebean in mebeans:
input=0
meName=""
print "--- Start ME: ---------------"
print mebean
print "-----------------------------"
while input>=0:
xidList=AdminControl.invoke(mebean , "getPreparedTransactions").splitlines()
print "--- Prepared Transactions ---"
index=0
for xid in xidList:
print " Index=%s XID=%s" % (index , xid)
index+=1
print "------- End of list ---------"
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 "No index selected."
else:
xid=xidList[input]
print "Enter c to commit or r to rollback XID %s" % xid
input=sys.stdin.readline().strip()
if input=="c":
print "Committing xid=%s" % xid
AdminControl.invoke(mebean , "commitPreparedTransaction" , xid)
if input=="r":
print "Rolling back xid=%s" % xid
AdminControl.invoke(mebean , "rollbackPreparedTransaction" , xid)
print
print "--- End ME --------------------"
print
print "No more ME definitions found, exiting"
Este script lista las identidades de las transacciones junto con un índice. A continuación, seleccione un índice y comprometa o retrotraiga la transacción correspondiente a dicho índice.