Unbestätigte Transaktionen auflösen
Verwenden Sie diese Task, um unbestätigte Transaktionen und die zugehörigen Nachrichten aufzulösen.
Informationen zu diesem Vorgang
Transaktionen können für unbegrenzte Zeit in einem unbestätigten Status verbleiben, wenn ein ausgewöhnlicher Umstand eintritt, z. B. wenn ein Knoten entfernt wird und dadurch die zugehörigen Messaging-Engines gelöscht werden. Wenn eine Transaktion einen unbestätigten Status annimmt, muss sie festgeschrieben oder rückgängig gemacht werden, damit die betroffene Messaging-Engine ihre normalen Verarbeitungsvorgänge fortsetzen kann.
- Mit den Transaktionsverwaltungsanzeigen des Servers
- Mit den Methoden in der MBean der Messaging-Engine
Sie müssen zuerst versuchen, die unbestätigte Transaktion über die MBean-Schnittstellen für die Verwaltung von Anwendungsservertransaktionen aufzulösen. Nähere Einzelheiten hierzu finden Sie im Artikel Aktive und vorbereitete Transaktionen mit wsadmin-Scripting verwalten. Verwenden Sie die Scripts für alle Anwendungsserver, die möglicherweise Transaktionen, einschließlich Messaging-Aktionen, für den Standard-Messaging-Provider koordiniert haben. Wenn den Scripts des Transaktionsmanagers die Transaktionsidentität bekannt ist, verwenden Sie diese Scripts, um die Transaktionen aufzulösen. Auf diese Weise werden alle Ressourcen (einschließlich der Messaging-Ressourcen) in einer globalen Transaktion einheitlich aufgelöst.
Wenn die Transaktionsidentität den Scripts des Transaktionsmanagers, die in jedem Anwendungsserver ausgeführt werden, nicht bekannt ist, oder wenn der Anwendungsserver mit dem Transaktionsmanager nicht wiederhergestellt werden kann, können Sie Methoden in der MBean "SIBMessagingEngine" verwenden, um den Messaging-Teil einer Transaktion unabhängig von der globalen Transaktion aufzulösen. Die Wahl zwischen Festschreibung und Rollback der Transaktion muss manuell getroffen werden.
- 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"
Dieses Script listet die Transaktions-IDs der Transaktionen zusammen mit einem Index auf. Sie können einen Index auswählen und die diesem Index entsprechende Transaktion festschreiben oder rückgängig machen.