3.2. トランザクションの管理
トランザクションの属性の表示
Java Naming and Directory Interface 名、EIS 製品名およびバージョン、状態などのトランザクションに関する情報を表示するには、read-resource
操作を使用します。
/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9:read-resource
トランザクション参加者の詳細の表示
各トランザクションログには、participants
(参加者) と呼ばれる子要素が含まれます。トランザクションの参加者の詳細を確認するには、この要素に read-resource
操作を使用します。参加者は、Java Naming および Directory Interface 名によって識別されます。
/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9/participants=java\:\/JmsXA:read-resource
結果は以下のようになります。
{ "outcome" => "success", "result" => { "eis-product-name" => "ActiveMQ", "eis-product-version" => "2.0", "jndi-name" => "java:/JmsXA", "status" => "HEURISTIC", "type" => "/StateManager/AbstractRecord/XAResourceRecord" } }
ここで示された結果は HEURISTIC
状態であり、リカバリーが可能です。詳細は、トランザクション参加者のリカバリー を参照してください。
特別な場合では、ログに対応するトランザクションレコードがないオーファンレコード (XAResourceRecords) をオブジェクトストアに作成できます。たとえば、準備済みの XA リソースが TM の記録前にクラッシュし、ドメイン管理 API はアクセス不可能である場合などです。このようなレコードにアクセスするには、管理オプション expose-all-logs
を true
に設定する必要があります。このオプションは管理モデルには保存されず、サーバーが再起動されると false
に戻ります。
/profile=default/subsystem=transactions/log-store=log-store:write-attribute(name=expose-all-logs, value=true)
代わりに以下のコマンドを実行すると、トランザクション参加者 ID が集約され表示されます。
/host=master/server=server-one/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9:read-children-names(child-type=participants)
トランザクション参加者の削除
各トランザクションログは、トランザクションを表すトランザクションログを削除する delete
操作をサポートします。
/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9:delete
これにより、トランザクションのすべての参加者も削除されます。
通常、参加者のログ管理はリカバリーシステムまたはそれを所有するトランザクションログに任せますが、delete
操作はその操作を安全に実行できる場合に使用できます。XA リソースがヒューリスティックに完了すると、forget
の呼び出しが発生し、XA リソースベンダーのログは適切に消去されます。この forget
呼び出しに失敗しても、デフォルトでは delete
操作は正常に行われます。この挙動をオーバーライドするには、ObjectStoreEnvironmentBean.ignoreMBeanHeuristics
システムプロパティーを false
に設定します。
トランザクション参加者のリカバリー
トランザクションの各参加者は、recover
操作を使用したリカバリーをサポートします。
/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9/participants=2:recover
トランザクション参加者の状態が HEURISTIC
である場合、recover
操作は状態を PREPARE
に切り替え、周期リカバリープロセスにコミットを再実行するよう要求します。
コミットに成功すると、参加者はトランザクションログから削除されます。これを検証するには、log-store
で probe
操作を実行し、参加者がリストされていないことを確認します。最後の参加者が削除されると、トランザクションも削除されます。
トランザクション参加者の状態の更新
トランザクションをリカバリーする必要がある場合は、リカバリーを試行する前に refresh
操作を使用して、トランザクションのリカバリーが必要であるかを確認できます。
/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9/participants=2:refresh