11.5. トランザクションタイムアウトの処理

リソースの無限ロッキングを防ぐため、 <xa-datasource> トランザクションマネージャーは指定の間隔後に完了しなかったインフライトトランザクションを停止します。これは、TransactionReaper が調整するバックグラウンドプロセスのセットによって停止が実行されます。リーパーは、範囲内で動作している可能性があるスレッドへ割り込まずにトランザクションをロールバックします。これにより、任意コードを実行するスレッドへの割り込みが原因で発生する不安定性を防ぐことができます。また、ビジネスロジックスレッドがネットワーク I/O 呼び出しなど割り込みできない操作を実行している場合、トランザクションを適時に停止できるようにします。 しかし、 この方法はマルチスレッド化されたトランザクションの処理を想定していないコードで、 予想外の動作が実行される原因となることがあります。予想外のトランザクション状況の変化により、他のトランザクション対応コンポーネントなどから警告やエラーメッセージが出力されることがありますが、 トランザクションの結果へは影響しないはずです。トランザクションタイムアウトの値を適切に調節することでこの問題を最小限に抑えることができます。詳細については、15章DataSource の設定 を参照してください。