6. 付録¶
デッドロック管理¶
デッドロック管理の概要¶
IM-Propagation では、複数のスレッドから同一の「データ処理クラス」が実行されないようロック制御されています。そのため、複数のスレッドでデータの伝搬が発生し、かつ、実行される「データ変換クラス」が連続する場合、デッドロックが発生する可能性があります。IM-Propagation には、デッドロックが発生した場合の検出機能が組み込まれています。「データ処理クラス」をロックする際の待機時間や、デッドロック検知時間の設定は、「IM-Propagation 設定」に定義します。設定ファイルの詳細は、「設定ファイルリファレンス - IM-Propagation 設定 」を参照してください。
デッドロック時の動作¶
デッドロックが発生する代表的なパターンを下図に示します。デッドロックを検出すると、データの伝搬は失敗扱いとなり、PropagationManager#send() メソッドを実行した際に SendException が発生します。送信側では、SendException を捕捉した場合、PropagationManager#abort() メソッドを呼び出してセッションの中断処理を行います。すると、受信側にもセッションの中断処理を行わせるため、「データ処理クラス」の onAbort メソッドが呼び出されますので、後処理が必要な場合、このメソッド内で処理を行います。