Mule ESB 3.7のエラーハンドリング
Muleではフローの実行中にエラーが発生したときのエラーハンドリングの仕組みを持っています。
いくつかの例外のタイプが用意されています。これらの例外ハンドリングの定義を含んだ親Flowを実行中に発生した例外が対象です。
- Catch exception strategy 例外ハンドリングができますが、トランザクションはコミットされます。
- Rollback exception strategy 例外ハンドリングができますが、トランザクションはロールバックされます。
- Reference exception strategy
- Choice exception strategy
この中で実案件では、Choice exceptionの理解は必須でかなと思います。 発生したエラーの内容に合わせて、実装するハンドリングを切り替えます。 実際のエラーハンドリングはCatch exception strategyや、Rollback exception strategyで書いていく。
構造を単純に書くとこんな感じ。
<flow> <リクエストの受取/> <メッセージ変換など/> <連携先の呼び出し/> <応答メッセージの編集/> <choice-exception-strategy> <例外Xが起こったときのハンドリング/> <例外Yが起こったときのハンドリング/> </choice-exception-strategy> </flow>
実際のサンプルです。
例えば、上の定義だと、データベースの接続ができなかった場合は次のエラーが発生しますが、その時、「500 Internal Server Error」をクライアントに返します。
org.mule.module.db.internal.domain.connection.ConnectionCreationException: java.sql.SQLException: Cannot get connection for URL
Select文のWhere句に使用する値をQuery Parameterから取得しています。そこに不正な文字列が使用された場合などにjava.sql.SQLSyntaxErrorException
が発生しますが、「400 Bad Request」をクライアントに返します。
これでよく分からないエラーメッセージが返ってくるよりも ぐっと、使い易いWebサービスになりました。
参照情報
マニュアル
Error Handling - Current Mule Documentation