Sun Java System Message Queue 3.7 UR1 管理ガイド

トランザクションの管理

クライアントアプリケーションによって開始されたトランザクションはすべてブローカによって記録されます。これらは、分散トランザクション (XA リソース) マネージャーによって管理される Message Queue の単純なトランザクション、または分散トランザクションです。

各トランザクションには、Message Queue トランザクション ID が付けられています。これは、ブローカのトランザクションを一意に識別するための 64 ビットの数字です。また、分散トランザクションには、分散トランザクションマネージャーによって割り当てられる最大 128 バイトの分散トランザクション ID (XID) が付けられます。Message Queue は、Message Queue トランザクション ID と XID の関連付けを保持します。

分散トランザクションの場合、障害が発生すると、トランザクションがコミットされずに PREPARED 状態のままになる可能性があります。このため、管理者は監視を行い、PREPARED 状態のトランザクションをロールバックするか、またはコミットする必要があります。

ブローカが追跡するすべてのトランザクションを一覧表示するには、list txn コマンドを使用します。次に示すのは、list tx サブコマンドの構文です。

imqcmd list txn

たとえば、次のコマンドでは、ブローカのすべてのトランザクションが一覧表示されます。

imqcmd list txn

トランザクションごとに、list サブコマンドは、トランザクション ID、状態、ユーザー名、メッセージまたは通知の数、および作成時間を返します。たとえば、次のように指定します。


---------------------------------------------------------------
Transaction ID  State    User name   # Msgs/   Creation time
                                     # Acks
---------------------------------------------------------------

64248349708800  PREPARED  guest      4/0      1/30/02 10:08:31 AM
64248371287808  PREPARED  guest      0/4      1/30/02 10:09:55 AM

このコマンドを使用すると、ブローカ内のローカルと分散の両方のトランザクションがすべて表示されます。PREPARED 状態のトランザクションだけをコミット、またはロールバックすることができます。これを実行するのは、障害の発生でトランザクションが PREPARED 状態になり、分散トランザクションマネージャーによってコミットされるプロセスになっていないことがわかっている場合だけです。

たとえば、ブローカの自動ロールバックプロパティーを false に設定した場合 (表 14–2 を参照)、ブローカの起動時に、PREPARED 状態のトランザクションを手動でコミット、またはロールバックする必要があります。

list サブコマンドは、トランザクションで生成されたメッセージの数とトランザクションで通知されたメッセージの数 (#Msgs/#Acks) も表示します。トランザクションがコミットされるまで、これらのメッセージは配信されず、通知は処理されません。

query サブコマンドを使用すると、同じ情報のほかに、多数の追加された値を確認できます。たとえばクライアント ID、接続識別子、分散トランザクション ID (XID) などです。次に示すのは、query txn サブコマンドの構文です。

imqcmd query txn -n transactionID

たとえば、次の例では以下のような出力が生成されます。

imqcmd query txn -n 64248349708800

Client ID
Connection                 guest@192.18.116.219:62209->jms:62195
Creation time              1/30/02 10:08:31 AM
Number of acknowledgments 0
Number of messages         4
State                      PREPARED
Transaction ID             64248349708800
User name                  guest
XID
6469706F6C7369646577696E6465723130313234313431313030373230

分散トランザクションをコミット、またはロールバックするには、commit サブコマンドと rollback サブコマンドを使用します。前述したように、PREPARED 状態のトランザクションだけをコミット、またはロールバックできます。

次に示すのは、commit サブコマンドの構文です。

imqcmd commit txn -n transactionID

たとえば、次のように指定します。

imqcmd commit txn -n 64248349708800

次に示すのは、rollback サブコマンドの構文です。

imqcmd rollback txn -n transactionID

詳細は、表 14–2imq.transaction.autorollback プロパティーを参照してください。

ブローカの起動時に、PREPARED 状態のトランザクションが自動的にロールバックされるように、ブローカを設定することも可能です。