1

私は以下のようにフェイルセーフシナリオに取り組んでいます。

しかし、recoveryflowでは、subflow1またはsubflow2の障害が原因で発生した例外またはexceptionPayloadを取得できません。

最初に成功したルーティングプロセッサの失敗したメッセージプロセッサによってスローされた例外を取得する方法はありますか?

FirstSuccessfulMuleクラスコードを調べました。その中のループから、例外がキャッチされているが保存されていないことがわかります。

私が拡張して自分自身の最初の成功を収めることができる方法はありますか?それは私にも例外を提供することができますか?

<flow name="main_flow" >
    ....
    ....
    <first-successful>
        <flow-ref  name="subflow_1" />
        <flow-ref  name="recoveryFlow1" />
    </first-successful>
    ....
    ....
    <first-successful>
        <flow-ref  name="subflow_2" />
        <flow-ref  name="recoveryFlow2" />
    </first-successful>
    ....
    ....
</flow>

<sub-flow name="subflow_1">
    ....
    ....
    <out-bound call to web-service />
    ....
    ....
</sub-flow>

<sub-flow name="subflow_2">
    ....
    ....
    <out-bound call to web-service />
    ....
    ....
</sub-flow>

<sub-flow name="revoceryFlow1" >
    <process communication based on the exception thrown by previous unsuccessful sub-flow 1>
    <some more processing so that the remaining main flow is not impacted because of the failue of the subflow 1  >
</sub-flow>

<sub-flow name="revoceryFlow2" >
    <process communication based on the exception thrown by previous unsuccessful sub-flow 2>
    <some more processing so that the remaining main flow is not impacted because of the failue of the subflow 2 >
</sub-flow>

私が間違った方向に進んでいるかどうか教えてください。私よりも良いアプローチはありますか?

4

1 に答える 1

0

私は解決策を得ました。ミュールからの直接的な解決策はありません。FirstSuccessfulの動作を上書きし、例外の詳細を含むプロパティを追加しました。これらのプロパティは、最初に成功した内部の次のメッセージプロセッサでアクセスされます。

catch (Exception ex)
        {
            event.getMessage().setProperty("prevError",  ex.getMessage()  , PropertyScope.INVOCATION);
            event.getMessage().setProperty("prevErrorClass",  ex.getClass()  , PropertyScope.INVOCATION);
            failed = true;
        }
于 2013-02-22T14:58:12.867 に答える