Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

12.7.7. トランザクションにおけるヒューリスティックな結果の処理方法

この手順では、Java Transaction API (JTA) を使用してトランザクションのヒューリスティックな結果を処理する方法を説明します。
ヒューリスティックなトランザクションの結果はよく発生するものではなく、通常は例外的な原因が存在します。ヒューリスティックという言葉は「手動」を意味し、こうした結果は通常手動で処理する必要があります。参照する「ヒューリスティックな結果」ヒューリスティックトランザクションの結果の詳細については。

手順12.5 トランザクションにおけるヒューリスティックな結果の処理方法

  1. 原因を確認する

    トランザクションのヒューリスティックな結果の最大の原因は、リソースマネージャーがコミットまたはロールバックの実行を約束したにも関わらず、約束を守らなかったことにあります。原因としては、サードパーティーコンポーネント、サードパーティーコンポーネントと JBoss EAP 6 間の統合レイヤー、または JBoss EAP 6 自体の問題が考えられます。
    ヒューリスティックなエラーの最も一般的な 2 つの原因は、環境での一時的な障害と、リソースマネージャー対応時のコーディングエラーです。
  2. 環境の一時的な障害を修正する

    通常、環境内で一時的な障害が発生した場合は、ヒューリスティックなエラーを発見する前に気づくはずです。ネットワークの停止、ハードウェア障害、データベース障害、電源異常などが考えられます。
    テスト環境でヒューリスティックな結果を経験した場合、ストレステスト中に、環境の弱点に関する情報が提供されます。
    ヒューリスティックトランザクションは回復されません
    JBoss EAP 6 は、障害時に非ヒューリスティック状態であったトランザクションを自動的に回復しますが、ヒューリスティックトランザクションの回復は試みません。
  3. リソースマネージャーベンダーに連絡する

    環境に明白な障害が発生していない場合や、ヒューリスティックな結果を簡単に再現できる場合は、おそらくコーディングエラーです。サードパーティーベンダーに連絡して、解決策が利用可能かどうかを確認してください。問題が JBoss EAP 6 自体のトランザクションマネージャーにあると思われる場合は、Red Hat グローバルサポートサービスに連絡してください。
  4. テスト環境で、ログを削除して JBoss EAP 6 を再起動します。

    テスト環境である場合や、データの整合性を気にしない場合は、トランザクションログを削除して JBoss EAP 6 を再起動すると、ヒューリスティックな結果はなくなります。トランザクションログは、デフォルト では、スタンドアロンサーバーの場合は EAP_HOME/Standalone/data/tx-object-store/に、管理対象ドメインの場合は EAP_HOME/domain/servers/SERVER_NAME/data/tx-object-store にあります。管理対象ドメインの場合、SERVER_NAME は、サーバーグループに参加している個々のサーバー名を示します。
    注記
    トラザクションログの場所は、使用中のオブジェクトストアや、object-store-relative-to および object-store-path パラメーターに設定された値にも左右されます。ファイルシステムログ (標準のシャドウログや HornetQ ログなど) の場合、デフォルトの方向の場所が使用されますが、JDBC オブジェクトストアを使用する場合、トランザクションログはデータベースに保存されます。
  5. 手作業で結果を解決する

    トランザクションの結果を手動で解決するプロセスは、障害の正確な状況に大きく依存します。通常、次の手順を実行して、状況に適用する必要があります。
    1. 関係しているリソースマネージャーを特定します。
    2. トランザクションマネージャーとリソースマネージャーの状態を調べます。
    3. 関係するコンポーネントの 1 つまたは複数で、ログの消去とデータの照合を手動で強制します。
    これらの手順を実行する方法の詳細は、このドキュメントの範囲外です。