未確定トランザクションの解決
このタスクを使用して、未確定トランザクションとそれに関連するメッセージを解決します。
このタスクについて
トランザクションは、メッセージング・エンジンの破壊を起こすようなノードの除去などの例外的な事情で、未確定状態のままいつまでも残される可能性があります。トランザクションが未確定になった場合、影響を受けたメッセージング・エンジンによる標準処理が続けられるように、トランザクションをコミットまたはロールバックしなければなりません。
- サーバーのトランザクション管理パネルを使用する
- メッセージング・エンジンの MBean のメソッドを使用する
まず、 アプリケーション・サーバーのトランザクション管理 MBean インターフェースを使用して 未確定トランザクションの解決を試みる必要があります。これらは、wsadmin スクリプトを使用したアクティブ・トランザクションおよび準備済みトランザクションの管理で説明しています。デフォルト・メッセージング・プロバイダーのトランザクション (メッセージング・アクションを含む) を調整している可能性があるすべてのアプリケーション・サーバーに対してスクリプトを使用します。 トランザクション ID がトランザクション・マネージャー・スクリプトで既知である場合は、それらのスクリプトを使用してトランザクションを解決します。 これにより、グローバル・トランザクション内のすべてのリソース (メッセージングを含む) が確実に解決されます。
トランザクション ID がアプリケーション・サーバーで実行されるトランザクション・マネージャー・スクリプトで既知でない場合や、トランザクション・マネージャーをホストするアプリケーション・サーバーを回復できない場合は、SIBMessagingEngine MBean のメソッドを使用して、グローバル・トランザクションとは別個のトランザクションのメッセージング部分を解決することができます。 トランザクションをコミットするか、またはロールバックするかの選択は、手動で行う必要があります。
- 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"
このスクリプトは、トランザクション ID を索引と共にリストします。これで、索引を選択し、その索引に対応するトランザクションをコミット、またはロールバックすることができます。