解析不確定的交易
請利用這個作業來解析不確定的交易及相關聯的訊息。
關於這項作業
交易有可能因為某個異常情況,例如,移除節點導致傳訊引擎毀損,而無限期地陷入不確定的狀態中。 當交易成為不確定時,必須加以確定或回復,受影響的傳訊引擎才能繼續正常的處理。
您可以利用管理主控台來顯示造成問題的訊息(請參閱列出訊息點的訊息)。
如果有訊息涉及不確定的交易,交易身分會顯示在訊息的相關聯畫面中。
之後,您可以用兩種方式來解析這個交易:
- 使用伺服器交易管理畫面
- 使用傳訊引擎 MBean 的方法
您必須先利用應用程式伺服器交易管理 MBean 介面,來嘗試解析不確定的交易。 這些在Managing active and prepared transactions by using wsadmin scripting中都有記載。 請針對預設傳訊提供者來使用所有可能已協調交易之應用程式伺服器的 Script,其中包括「傳訊」動作。 如果交易管理程式 Script 能夠識別交易身分,請利用這些 Script 來解析交易。 這會一致地解析廣域交易內的所有資源(包括傳訊)。
如果在任何應用程式伺服器上執行的交易管理程式 Script 無法識別交易身分,或代管交易管理程式的應用程式伺服器無法回復,您可以利用 SIBMessagingEngine MBean 的方法,在廣域交易之外,個別解析交易的「傳訊」部分。 您必須手動選擇確定或回復交易。
傳訊引擎 MBean 的下列方法可用來取得交易身分 (xid) 清單,以及確定和回復交易:
- getPreparedTransactions()
- commitPreparedTransaction(String xid)
- rollbackPreparedTransaction(String xid)
如果要呼叫這些方法,您可以使用 wsadmin 指令,例如,您可以使用下列格式的指令,來從傳訊引擎 MBean 中取得不確定的交易身分清單:
wsadmin>AdminControl.invoke(AdminControl.queryNames("type=SIBMessagingEngine,*").
splitlines()[0] , "getPreparedTransactions")
另外,您也可以使用如下的 Script 來呼叫 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"
這個 Script 會連同索引來列出交易的交易身分。 之後,您可以選取一個索引,然後確定或回復對應於這個索引的交易。