14.2. トランザクション管理
14.2.1. トランザクションの参照と管理
管理 CLI では、トランザクションレコードを参照および操作する機能がサポートされます。この機能は、TM と JBoss EAP の管理 API 間の対話によって提供されます。
トランザクションマネージャーは、待機中の各トランザクションとトランザクションに関連する参加者に関する情報を、オブジェクトストアと呼ばれる永続ストレージに格納します。管理 API は、オブジェクトストアを log-store
と呼ばれるリソースとして公開します。probe
操作はトランザクションログを読み取り、各レコードに対してノードパスを作成します。probe
コマンドは、log-store
を更新する必要があるときに、いつでも手動で呼び出すことができます。トランザクションログが即座に表示され非表示になるのは、正常な挙動です。
ログストアの更新
以下のコマンドは、マネージドドメインでプロファイル default
を使用するサーバーグループに対してログストアを更新します。スタンドアローンサーバーの場合は、コマンドから profile=default
を削除します。
/profile=default/subsystem=transactions/log-store=log-store:probe
準備済みトランザクションすべての表示
準備済みトランザクションをすべて表示するには、最初に ログストアを更新 し、ファイルシステムの ls
コマンドに類似した機能を持つ次のコマンドを実行します。
ls /profile=default/subsystem=transactions/log-store=log-store/transactions
または、以下を実行します。
/host=master/server=server-one/subsystem=transactions/log-store=log-store:read-children-names(child-type=transactions)
各トランザクションが一意の識別子とともに表示されます。個別の操作は、個別のトランザクションに対して実行できます (トランザクションの管理 を参照)。
14.2.1.1. トランザクションの管理
トランザクションの属性を表示する
JNDI 名、EIS 製品名およびバージョン、状態などのトランザクションに関する情報を表示するには、read-resource
操作を使用します。
/profile=default/subsystem=transactions/log-store=log-store/transactions=0\:ffff7f000001\:-b66efc2\:4f9e6f8f\:9:read-resource
トランザクション参加者の詳細の表示
各トランザクションログには、participants
(参加者) と呼ばれる子要素が含まれます。トランザクションの参加者の詳細を確認するには、この要素に read-resource
操作を使用します。参加者は JNDI 名によって識別されます。
/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
これにより、トランザクションのすべての参加者も削除されます。
トランザクション参加者の回復
トランザクションの各参加者は、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
14.2.2. トランザクション統計情報の表示
トランザクションマネージャーの統計が有効になっていると、トランザクションマネージャーによって処理されたトランザクションの統計を表示できます。トランザクションマネージャーの統計を有効にする方法については、トランザクションマネージャーの設定 を参照してください。
管理コンソールまたは管理 CLI を使用して統計を表示できます。管理コンソールでは、Runtime タブから Transaction サブシステムを選択するとトランザクションの統計を表示できます。管理 CLI では、read-resource
操作に include-runtime=true
を使用すると統計を表示できます。以下に例を示します。
/subsystem=transactions:read-resource(include-runtime=true)
次の表に、利用可能な各統計とその説明を示します。
統計 | 説明 |
---|---|
number-of-transactions | このサーバー上でトランザクションマネージャーにより処理されるトランザクションの合計数。 |
number-of-committed-transactions | このサーバー上でトランザクションマネージャーにより処理されるコミット済みトランザクションの数。 |
number-of-aborted-transactions | このサーバー上でトランザクションマネージャーにより処理されるアボートされたトランザクションの数。 |
number-of-timed-out-transactions | このサーバー上でトランザクションマネージャーにより処理されるタイムアウトのトランザクションの数。タイムアウトしたトランザクションの数は、中止されたトランザクションの数にも計算されます。 |
number-of-heuristics | ヒューリスティック状態のトランザクションの数。 |
number-of-inflight-transactions | 開始済みであるが終了されていないトランザクション数。 |
number-of-application-rollbacks | 障害の原因がアプリケーションであった失敗トランザクションの数。 |
number-of-resource-rollbacks | 障害の原因がリソースであった失敗トランザクションの数。 |
14.2.3. トランザクションオブジェクトストア
トランザクションにはオブジェクトを保存する場所が必要です。オブジェクトストレージのオプションの 1 つが JDBC データソースです。特にパフォーマンスが気になる場合、JDBC オフジェクトストアはファイルシステムまたは ActiveMQ ジャーナルオブジェクトストアよりも速度が遅くなる場合があります。
トランザクションログのストレージタイプとして Apache ActiveMQ Artemis ジャーナルを使用するよう transactions
サブシステムが設定されている場合、JBoss EAP の 2 つのインスタンスは同じディレクトリーを使用してジャーナルを保存することはできません。アプリケーションサーバーインスタンスは同じ場所を共有することはできず、アプリケーションサーバーインスタンスごとに一意な場所を設定する必要があります。
トランザクションオブジェクトストアがないと、データの一貫性を保てなくなる可能性があります。そのため、オブジェクトストアを 安全な ドライブに配置する必要があります。
JDBC データソースをトランザクションオブジェクトストアとして使用
JDBC データソースをトランザクションオブジェクトストアとして使用するには、以下の手順に従います。
-
データソース (例:
TransDS
) を作成します。手順については、非 XA データソースの作成を 参照してください。オブジェクトストアが適切に動作するには、データソースの JDBC ドライバーを JAR デプロイメントとしてではなく、コアモジュールとしてインストールする 必要があることに注意してください。 データソースの
jta
属性をfalse
に設定します。/subsystem=datasources/data-source=TransDS:write-attribute(name=jta, value=false)
jdbc-store-datasource
属性を、使用するデータソースの JNDI 名に設定します (例:java:jboss/datasources/TransDS
)。/subsystem=transactions:write-attribute(name=jdbc-store-datasource, value=java:jboss/datasources/TransDS)
use-jdbc-store
属性をtrue
に設定します。/subsystem=transactions:write-attribute(name=use-jdbc-store, value=true)
- JBoss EAP サーバーを再起動し、変更を反映します。
トランザクション JDBC ストア属性
以下の表は、JDBC オブジェクトストレージに関係する利用可能な属性をすべて表しています。
プロパティー | 説明 |
---|---|
use-jdbc-store |
トランザクションに対して JDBC ストアを有効にするには、 |
jdbc-store-datasource | ストレージに使用される JDBC データソースの JNDI 名。 |
jdbc-action-store-drop-table |
起動時にアクションストアテーブルをドロップおよび再作成するかどうか。デフォルトは |
jdbc-action-store-table-prefix | アクションストアテーブル名の接頭辞。 |
jdbc-communication-store-drop-table |
起動時にコミュニケーションストアテーブルをドロップおよび再作成するかどうか。デフォルトは |
jdbc-communication-store-table-prefix | コミュニケーションストアテーブル名の接頭辞。 |
jdbc-state-store-drop-table |
起動時にステートストアテーブルをドロップおよび再作成するかどうか。デフォルトは |
jdbc-state-store-table-prefix | ステートストアテーブル名の接頭辞。 |
ActiveMQ ジャーナルオブジェクトストアの使用
以下の手順に従って、ActiveMQ ジャーナルオブジェクトストアを使用します。
use-journal-store
属性をtrue
に設定します。/subsystem=transactions:write-attribute(name=use-journal-store,value=true)
- JBoss EAP サーバーを再起動し、変更を反映します。