Flex Gateway新着情報
Governance新着情報
Monitoring API Manager
このバージョンの Mule は、拡張サポートが終了する 2023 年 5 月 2 日にその すべてのサポートが終了しました。 このバージョンの Mule を使用する CloudHub には新しいアプリケーションをデプロイできなくなります。許可されるのはアプリケーションへのインプレース更新のみになります。 標準サポートが適用されている最新バージョンの Mule 4 にアップグレードすることをお勧めします。これにより、最新の修正とセキュリティ機能強化を備えたアプリケーションが実行されます。 |
Mule で発生するエラーは、次の 2 つの主要カテゴリのいずれかに分類されます。
システムレベルで例外が発生し、Mule イベントが関係していない場合、システムエラーがスローされます。システムエラーハンドラーは、次の状況で発生した例外を管理します。
アプリケーションの起動中。
外部システムへの接続が失敗した場合。
システムエラーが発生すると、Mule は、登録されているリスナーにエラー通知を送信し、エラーを記録し、エラーが接続の失敗によるものであれば再接続戦略を実行します。
システムエラーハンドラーは、Mule では設定できません。
Mule イベントと Mule イベントに含まれるメッセージを処理する Mule アプリケーションのフロー内で問題が発生すると、Mule はメッセージングエラー (Mule エラー) をスローします。
Mule メッセージングエラーは複数の方法で処理できます。
デフォルトのエラー処理メカニズムを使用できます。
フロー内では、フローの組み込み Error Handler コンポーネント内で On-Error コンポーネント (On Error Continue および On Error Propagate) をセットアップできます。これらのコンポーネントには、エラーを処理するための任意の数のコンポーネントを含めることができます。
次の図は、イベントプロセッサー (HTTP Request 操作やデータベース操作など) でエラーがスローされたときの動作を示しています。
フロー外では、 Error Handler コンポーネントをセットアップし、そのコンポーネントを他のエラーハンドラー設定から参照できます。グローバルエラーハンドラーには、On Error コンポーネントとそのコンテンツを含めることもできます。
エラー処理は、フローに存在する Try スコープ内からセットアップすることもできます。スコープ内には組み込みエラーハンドラーが含まれ、その中で On Error コンポーネントとそのコンテンツを設定できます。
デフォルトでは、未処理のメッセージングエラーは記録され、伝達されます。フローで処理されている Mule メッセージでエラーが発生すると、フローの通常の実行は停止し、プロセスがフローのデフォルトのエラーハンドラーに転送され、そのエラーハンドラーでエラーが伝達されます。
次の例は、エラーを管理するように明示的に設定したエラー処理コンポーネントを使用するのではなく、デフォルトのエラー処理を使用する簡単な Mule アプリケーション設定を示しています。
デフォルトのエラー処理の例の XML は次のようになります。
<http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" >
<http:listener-connection host="0.0.0.0" port="8081" />
</http:listener-config>
<http:request-config name="HTTP_Request_configuration" doc:name="HTTP Request configuration" >
<http:request-connection host="jsonplaceholder.typicode.com" port="80" />
</http:request-config>
<flow name="error-handlers-example" >
<http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/users"/>
<http:request method="GET" doc:name="Request" config-ref="HTTP_Request_configuration" path="/somebadrequest"/>
</flow>
この設定で Mule アプリケーションを開始し、http://0.0.0.0:8081/users
を (たとえばブラウザーなどに) 読み込むことで HTTP リスナーをトリガーすると、フローは、存在しないファイルに対して HTTP 要求 (http://jsonplaceholder.typicode.com:80/somebadrequest
) を実行します。結果として、Studio コンソールはエラーを記録して Web ブラウザーに伝達します。
Studio コンソールはエラーメッセージを出力します。このメッセージは、HTTP GET 要求から返された 404 エラーがデフォルトハンドラー (OnErrorPropagateHandler
) により伝達されていることを示します。Mule はこのエラーを HTTP:NOT_FOUND として識別します。
****************************************************************************
ERROR 2019-08-05 21:49:38,323
[[error-handlers-normal].http.requester.HTTP_Request_configuration.04 SelectorRunner]
[event: ] org.mule.runtime.core.internal.exception.OnErrorPropagateHandler:
****************************************************************************
Message : HTTP GET on resource 'http://jsonplaceholder.typicode.com:80/somebadrequest' failed: not found (404).
Error type : HTTP:NOT_FOUND
Element : error-handlers-example/processors/0 @ error-handlers-normal:error-handlers-normal.xml:16 (Request)
Element XML : <http:request method="GET"
doc:name="Request"
doc:id="51e94e98-2a62-4fa7-98e0-942bed31ee11"
config-ref="HTTP_Request_configuration"
path="/somebadrequest">
</http:request>
(set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
****************************************************************************
HTTP:NOT_FOUND エラーの説明は、リスナーをトリガーするために使用したブラウザータブに表示されます。
HTTP GET on resource 'http://jsonplaceholder.typicode.com:80/somebadrequest'
failed: not found (404).
この Mule エラーの説明は 2 つの理由でブラウザーに表示されます。デフォルトエラーハンドラーは On Error Propagate (エラー時伝播) プロセス (OnErrorPropagateHandler
) を使用します。このプロセスではフローは失敗し、HTTP リスナーは、見つからないファイルに関連付けられる 404 のエラー応答を準備します。また、HTTP リスナーは、カスタム応答ではなく、デフォルトのエラー (error.description
) および成功 (payload
) 応答を使用してメッセージ本文を返しているため、ブラウザーにエラーの説明が表示されます。
デフォルトのエラー処理メカニズムを使用する代わりに On-Error コンポーネント (On Error Continue および On Error Propagate) を組み込みまたは外部の Error Handler コンポーネント内で使用できます。
次の例は、HTTP リスナーがトリガーされたときに HTTP 要求の結果を返すように Studio で設定された簡単なフローを示しています。 デフォルトのエラー処理の例とは異なり、この例では、On Error Continue (on-error-continue
) がフローの組み込み Error Handler (error-handler
) コンポーネント内で設定され、On Error Continue には、エラーの説明を書き込む Logger が含まれます。
この例の XML は次のようになります。
<http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" >
<http:listener-connection host="0.0.0.0" port="8081" />
</http:listener-config>
<http:request-config name="HTTP_Request_configuration" doc:name="HTTP Request configuration" >
<http:request-connection host="jsonplaceholder.typicode.com" port="80" />
</http:request-config>
<flow name="error-handlers-normalFlow" >
<http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/users"/>
<http:request method="GET" config-ref="HTTP_Request_configuration" path="/somebadrequest"/>
<logger level="INFO" doc:name="Logger" />
<error-handler>
<on-error-continue enableNotifications="true" logException="true" doc:name="On Error Continue" >
<logger level="ERROR" doc:name="Logger" message="#[error.description]"/>
</on-error-continue>
</error-handler>
</flow>
デフォルトのエラー処理の例と同様に、要求されたページが見つからないため、フローは 404 エラーを返し、Mule はこのエラーを HTTP:NOT_FOUND エラーとして識別します。
ただし、このケースでは、エラーが伝達されないため、HTTP リスナーをトリガーするために使用したブラウザーのタブは空白になります。On Error Continue を使用すると、例のフローは、ページが見つからなくても、GET 要求の 200 と共に正常終了したかのように処理されます。HTTP リスナーはデフォルトの成功応答の動作 (メッセージ本文として payload
コンテンツを返す) を実行します。ページが見つからなかったため、ブラウザーに表示するコンテンツはありません。このため、ブラウザータブは空白になります。
Studio コンソールには、OnErrorContinueHandler
がエラーを処理していることを示すエラーメッセージ (以下の 1 番目の ERROR メッセージ) も出力されます。また、Mule エラーについて説明する (error.description
。「Mule エラーのセレクター式」を参照)、ロガーからの ERROR メッセージ (以下の 2 番目の ERROR) が出力されます。
ERROR 2019-08-05 14:24:06,825
[[error-handlers-normal].http.requester.HTTP_Request_configuration.03 SelectorRunner]
[event: ] org.mule.runtime.core.internal.exception.OnErrorContinueHandler:
********************************************************************************
Message : HTTP GET on resource 'http://jsonplaceholder.typicode.com:80/somebadrequest' failed: not found (404).
Error type : HTTP:NOT_FOUND
Element : error-handlers-normalFlow/processors/0 @ error-handlers-normal:error-handlers-normal.xml:15 (Request)
Element XML : <http:request method="GET" doc:name="Request"
doc:id="51e94e98-2a62-4fa7-98e0-942bed31ee11"
config-ref="HTTP_Request_configuration"
path="/somebadrequest">
</http:request>
(set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************
ERROR 2019-08-05 14:24:06,827 [[error-handlers-normal].http.requester.HTTP_Request_configuration.03 SelectorRunner]
[event: 5b2dbd90-b7c7-11e9-918b-8c8590a99d48] org.mule.runtime.core.internal.processor.LoggerMessageProcessor:
HTTP GET on resource 'http://jsonplaceholder.typicode.com:80/somebadrequest' failed: not found (404).
On Error Continue (on-error-continue
) の代わりに On Error Propagate (on-error-propagate
) を使用して同じ Mule アプリケーションを作成した場合、同じエラーメッセージが Studio コンソールに表示されますが、記録されたエラーメッセージがブラウザーにも表示されます。この動作はデフォルトのエラー処理動作と同じです。どちらも On Error Propagate を使用するためです。
各 On Error コンポーネント内で、定義するエラーパスには任意の数のイベントプロセッサーを組み込むことができるため、特定のエラー種別を必要なだけ正確に処理できます。On-Error コンポーネントで処理する特定の Mule エラーを選択できます。Error Handler コンポーネントは、エラーに一致する最初の On Error コンポーネントにエラーを転送します。
フローレベルでのより複雑なエラー処理設定については、「Mule 4 の概要: エラーハンドラー」を参照してください。 On Error Continue および On Error Propagate についての詳細は、「On-Error コンポーネント」を参照してください。
グローバルエラーハンドラーは、同じ方法でエラーを処理する複数のフローまたは Try スコープが必要な場合に役立つ可能性があります。エラーハンドラーへの参照を提供することで、再利用設定を作成できます。
次の XML 設定では、<configuration doc:name="Configuration" defaultErrorHandler-ref="allErrorHandler" />
を使用して <error-handler name="allErrorHandler"/>
設定を参照するデフォルトのエラー処理設定を定義します。
<http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" >
<http:listener-connection host="0.0.0.0" port="8081" />
</http:listener-config>
<http:request-config name="HTTP_Request_configuration" doc:name="HTTP Request configuration" >
<http:request-connection host="json.typicode.com/" port="80" />
</http:request-config>
<configuration doc:name="Configuration" defaultErrorHandler-ref="allErrorHandler" />
<flow name="someFlow" >
<http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/users"/>
<http:request method="GET" doc:name="Request" config-ref="HTTP_Request_configuration" path="/somebadrequest"/>
</flow>
<error-handler name="allErrorHandler" >
<on-error-continue enableNotifications="true" logException="true" doc:name="On Error Continue" >
<set-payload value="#[error.description]" doc:name="Set Payload" />
</on-error-continue>
</error-handler>
Studio UI では、グローバルエラー処理の例は次のようになります。
この例には、エラーを処理するための 2 つの主要なコンポーネントが含まれます。Studio キャンバスに表示される埋め込みコンポーネントを含む Error Handler (error-handler
) と、キャンバスに表示されないグローバルエラー処理設定です。
UI の例のフロー (someFlow) は、Error Handler コンポーネントが Mule アプリケーションのフローの外側にあることを示しています。
要求により HTTP:NOT_FOUND エラーが生成されるため、Studio コンソールには、OnErrorContinueHandler
がエラーを処理していることを示すエラーメッセージが出力されます。
On Error Continue 設定では、処理するエラーが伝達されません (On-Error コンポーネントを使用したメッセージングエラーの処理 を参照)。
XML マークアップで設定を記述する代わりに Studio UI でグローバルエラー処理の例をセットアップする方法は、次のとおりです。
[Error Handler] コンポーネントを [Mule Palette (Mule パレット)] から Studio キャンバスにドラッグし、「allErrorHandler」という名前を付けます。
このコンポーネントはどのフローにも含まれません。
[On Error Continue] コンポーネントを [Error Handler] コンポーネントにドラッグします。
[Set Payload] コンポーネントを [On Error Continue] コンポーネントにドラッグします。
[Set Payload] コンポーネントは 1 つの例です。Logger など、他のコンポーネントを使用して、そのコンポーネント内で独自のエラーメッセージを記述することができます。Set Payload の例では、エラーの説明に Mule 変数を使用します (詳細は、「定義済み変数」の error
変数を参照)。
Studio でグローバルエラー処理参照を作成します。
[Global Elements (グローバル要素)] をクリックして [Global Configuration Elements (グローバル設定要素)] を開きます。
[Global Elements (グローバル要素)] は Studio キャンバスの下にあります。
[Global Configuration Elements (グローバル設定要素)] で [Create (作成)] をクリックして [Choose Global Type (グローバル種別の選択)] ダイアログを開きます。
ダイアログから [Global Configuration (グローバル設定)] -→ [Configuration (設定)] を選択し、[OK] をクリックして、[Configuration (設定)] ダイアログを開きます。
[Configuration (設定)] ダイアログから、[Default Error Handler (デフォルトのエラーハンドラー)] 項目で [allErrorHandler] を選択し、[OK] をクリックします。
XML で記述された値を使用して、HTTP Listener および HTTP Request コンポーネントをセットアップします。
(Studio キャンバスの下にある) [Configuration XML (設定 XML)] をクリックして、XML 設定が正しいことを確認します。
注意: この例の一部の要素の設定は XML のみです。
フローは、フローの外側にあるグローバルエラーハンドラーを参照できます。フローはそのすべてのエラーを、参照を介して記録します。
<error-handler name="loggingErrorHandler">
<on-error-continue>
<logger message="#['Error: ' ++ error.description]"/>
</on-error-continue>
</error-handler>
<flow name="withSharedHandler">
<http:request url="http://example.com"/>
<error-handler ref="loggingErrorHandler"/>
</flow>
この XML の例では、グローバルエラーハンドラーは、loggingErrorHandler
という名前の <error-handler/>
要素を介して設定されます。. フローは <error-handler ref="loggingErrorHandler"/>
を使用してエラーハンドラーを参照します。
Studio でフローからグローバルエラーハンドラー設定を参照する手順は、次のとおりです。
Studio で、[Error Handler] コンポーネントを [Mule Palette (Mule パレット)] からキャンバスにドラッグし、UI を使用してそのコンポーネントを設定します。
Mule アプリケーションで、(Studio キャンバスの下にある) [Configuration XML (設定 XML)] をクリックします。
(XML のみの設定) <flow/>
要素内で、参照の XML を入力します (例: <error-handler ref="loggingErrorHandler"/>
)。
次の例では、<error-handler/>
要素内の <on-error ref="loggingErrorHandler"/>
を使用してグローバル On Error Continue 要素 (<on-error-continue/>
) を参照します。どちらも、UI ではなく、[Configuration XML (設定 XML)] を介した手動設定が必要です。
<http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" >
<http:listener-connection host="0.0.0.0" port="8081" />
</http:listener-config>
<on-error-continue name="loggingErrorHandler">
<logger message="#['Error: ' ++ error.description]" level="INFO"/>
</on-error-continue>
<flow name="withSharedHandler">
<http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/"/>
<http:request url="http://jsonplaceholder.typicode.com/badrequestbad" method="GET"/>
<error-handler >
<on-error ref="loggingErrorHandler"/>
</error-handler>
</flow>