ユーザが指定した順に、メディエータファンクションを呼び出すのがシーケンスエンジンです。シーケンスエンジンは、受信したメッセージを指定した順に加工・編集し、サービスやサービス利用側アプリケーションに結果を送信します。
メディエータファンクションとして作成するユーザプログラムに、エラー時の処理を登録しておくと、エラー発生時に自動的に呼び出されます。
シーケンスエンジンは、メディエータファンクションの初期処理、実行処理、終了処理など処理全体の流れを制御します。
初期処理
ユーザが指定した順序で、すべてのメディエータファンクションの初期処理を実行します。
メディエータファンクション内に初期処理が登録されていない場合は、次のステップに移ります。
図2.41 初期処理の実行
実行処理
初期処理が完了すると、次にメディエータファンクションのサービス実行処理を実行します。
また、条件分岐機能を使用することで、処理の経路を動的に変更することができます。
図2.42 サービス実行処理の実行
終了処理
サービス実行処理が完了すると、次にすべてのメディエータファンクションの終了処理を実行します。
メディエータファンクション内に終了処理が登録されていない場合は、次のステップに移ります。
すべての終了処理が完了すると、シーケンスを終了します。
図2.43 終了処理の実行
エラー発生時の処理ルート
メディエータファンクション内にエラー時の処理を登録しておくと、メディエータファンクション実行時にエラーが発生した場合、エラー時の処理が実行されます。この場合、エラーが発生した1つ前のステップから通常とは逆の順序で実行されます。また、条件分岐機能を使用している場合は、実行処理で実行済みのメディエータファンクションのキャンセル処理だけが実行されます。
以下は、ユーザアプリケーションAがエラー時の処理として、キャンセル処理を登録していた場合の、ユーザアプリケーションBでエラーが発生したときの動作イメージです。
図2.44 キャンセル処理の実行
エラーハンドリング
エラーが発生した場合に別のシーケンスを呼び出すことができます。エラー発生時に呼び出すシーケンスに、エラー処理メディエータファンクションを指定することで、例外処理を段階的に整備できます。
エラーハンドリングのシーケンスが呼び出されるタイミングは、上記のエラー発生時の処理、および終了処理が完了したあとです。
エラーハンドリングのシーケンスには、以下の情報をもつ共通メッセージが渡されます。
ヘッダ
エラー発生時の処理、および終了処理が完了したあとのヘッダについて、“com.fujitsu.esi”で始まるキーのヘッダについては、“com.fujitsu.esi”の部分が“com.fujitsu.esi.mainsequence”に置換されて渡されます。それ以外のヘッダはそのまま渡されます。
ペイロード
エラー発生時の処理、および終了処理が完了したあとのペイロード、またはシーケンス開始時のペイロードが渡されます。どちらを渡すかは、シーケンス定義で指定します。
リトライ
エラーが発生した場合にシーケンスのリトライを行うことができます。
リトライは、上記のエラー発生時の処理、および終了処理が完了したあとに、初期処理から実行をやりなおします。
また、エラーハンドリングを指定している場合、リトライがすべて失敗したあとにエラーハンドリングで指定されたシーケンスを呼び出します。