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.

Puede utilizar la consola administrativa para visualizar los mensajes que han originado el problema (consulte Listado de mensajes en un punto de mensaje). Si existen mensajes implicados en una transacción dudosa, la identidad de la transacción se muestra en un panel asociado al mensaje. A continuación, puede resolver la transacción de dos modos:
  1. A través de los paneles de gestión de transacciones del servidor
  2. 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.

Los siguientes métodos en el MBean del motor de mensajería se pueden utilizar para obtener una lista de identidades de las transacciones (xid) y para comprometer o retrotraer transacciones:
  • getPreparedTransactions()
  • commitPreparedTransaction(String xid)
  • rollbackPreparedTransaction(String xid)
Para invocar los métodos, puede utilizar un mandato wsadmin, por ejemplo, puede utilizar un mandato del formato siguiente para obtener una lista de las identidades de las transacciones dudosas de un MBean de motor de mensajería:
wsadmin>AdminControl.invoke(AdminControl.queryNames("type=SIBMessagingEngine,*").
splitlines()[0] , "getPreparedTransactions")
[IBM i]Nota: [IBM i]El cliente de scripts wsadmin se ejecuta desde Qshell. [IBM i]Para obtener más información, consulte Configuración de Qshell para ejecutar scripts de WebSphere mediante el script wsadmin.
Alternativamente, puede utilizar un script como, por ejemplo, el siguiente para invocar métodos en el MBean:
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.

Procedimiento

  1. Utilice la consola administrativa para encontrar la identidad de la transacción de los mensajes que tienen transacciones dudosas.
  2. Opcional: Si aparece una identidad de transacción en el panel de gestión de transacciones, comprometa o retrotraiga las transacciones según sea necesario.
  3. Opcional: Si una identidad de transacción no aparece en el panel de gestión de transacciones, utilice los métodos en el MBean del motor de mensajería. Por ejemplo, utilice un script para mostrar una lista de identidades de transacción para transacciones dudosas. Para cada transacción:
    1. Escriba el índice de la identidad de la transacción.
    2. Opcional: Escriba c para comprometer la transacción.
    3. Opcional: Escriba r para retrotraer la transacción.
  4. Para comprobar que las transacciones ya no son dudosas, reinicie el servidor y utilice el panel de gestión de transacciones, o los métodos en el MBean del motor de mensajería que se va a comprobar.

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=tjm0165_
File name: tjm0165_.html