Flex Gateway新着情報
Governance新着情報
Monitoring API Managerスコープ内のコンポーネントの実行中に発生する可能性のあるエラーを処理します。
Try スコープは、スコープに追加したコンポーネントによってスローされた例外をキャッチして処理します。スコープ内のエラー処理は、Flow コンポーネント内のエラー処理と似ています。個別のフローを設定する代わりに、Flow コンポーネント内で Try を使用できます。
ペイロードを変更したり、変数を追加、変更、または削除したりすると、実行の残りの部分に伝播されます。エラーハンドラー内での変更も伝播されます。
Try スコープではトランザクションがサポートされています。トランザクションとは、正常に実行される必要がある一連のアクションです。エラーが伝播されてトランザクションがロールバックされるか、またはエラーが処理されてトランザクションがコミットされるかによって、成功または失敗する 1 つの単位として Try スコープ内のコンポーネントを設定します。どちらの場合でも、Try スコープを含むフローは処理を続行します。
このコンポーネントは、次の XML 構造をサポートします。
<try
doc:name="Try"
doc:id="dieaig"
transactionalAction="${action}" />
Try スコープ (<try/>
) 属性は UI および XML で設定できます。
属性名 | 属性 XML | 説明 |
---|---|---|
Try (試行) (デフォルト) |
|
キャンバスに表示されるコンポーネントの編集可能な名前。 |
なし |
|
コンポーネントの自動生成された識別子。 |
Transaction type (トランザクション種別) |
|
トランザクションの種別を指定します。可能な値:
|
Transactional action (トランザクションアクション) |
|
トランザクションの処理方法を定義します。可能な値:
|
次の例は、異なる状況でトランザクションを処理するために Try スコープを設定する方法を示しています。
次の例は、フローレベルでトランザクションを開始するように設定された jms:listener
操作、トランザクションを (設定に従って) 開始または結合しようとする Try スコープ、そしてトランザクションの外部で実行するように設定された jms:publish
操作を示しています。
<flow name="someFlow">
<jms:listener config-ref="JMS_Config" destination="test.in" transactionalAction="ALWAYS_BEGIN"/>
<!-- Processors -->
<try transactionalAction="${action}">
<!-- Processors -->
<!-- Join if possible is the default value for jms:publish operation -->
<jms:publish config-ref="JMS_Config" destination="test.out" transactionalAction="NOT_SUPPORTED"/>
<raise-error type="APP:SOME"/>
<!-- More Processors -->
</try>
<!-- Processors -->
</flow>
Try スコープ内の操作でエラーが発生しなければ、設定されている transactionalAction
値には関係なく、スコープは実行を完了してトランザクションをコミットします。
<raise-error/>
コンポーネントが追加されると、Try スコープの transactionalAction
によってトランザクションとメッセージの処理方法が変わります。
Ignore (無視) (INDIFFERENT
)
この場合は、Try スコープ内で操作を実行しながらトランザクションが継続します。エラーが発生すると、接続元に伝播されます (<on-error-continue>
エラーハンドラーでは処理しません)。トランザクションがロールバックされ、メッセージが JMS キューで再び使用できるようになります。このロールバックは、すでに完了している jms:publish
操作には影響しません。transactionAction
がデフォルトの NOT_SUPPORTED
に設定されているため、この操作はトランザクションスコープの外部となります。
transactionAction
が JOIN_IF_POSSIBLE
に設定されていれば、jms:publish
操作もロールバックされます。
Always Begin (常に開始) (ALWAYS_BEGIN
)
アクティブなトランザクションがすでに存在するため、エラーが発生します。
Begin or Join (開始または結合) (BEGIN_OR_JOIN
)
この場合は、すでにトランザクションが開始されているため、スコープはアクティブなトランザクションに結合します。結果は INDIFFERENT
の場合と同じです。
次の例には、フローレベルのエラーハンドラーが含まれています。
次の例では、エラーハンドラーをフローレベルで追加しています。
<flow name="someFlow">
<jms:listener config-ref="JMS_Config" destination="test.in" transactionalAction="ALWAYS_BEGIN"/>
<!-- Processors -->
<try transactionalAction="${action}">
<!-- Processors -->
<!-- Join if possible is the default value for jms:publish operation -->
<jms:publish config-ref="JMS_Config" destination="test.out"/>
<raise-error type="APP:SOME"/>
<!-- More Processors -->
</try>
<!-- Processors -->
<error-handler>
<on-error-continue/>
</error-handler>
</flow>
この例の動作は次のようになります。
Ignore (無視) (INDIFFERENT
)
トランザクションは続行します。エラーは on-error-continue
エラーハンドラーで処理されるため、トランザクションはコミットされます。jms:listener
接続元から読み出されたメッセージはコンシュームされ、jms:publish
操作で処理されたメッセージが実際に送信されます。
Always Begin (常に開始) (ALWAYS_BEGIN
)
アクティブなトランザクションがすでに存在するため、エラーが発生します。
Begin or Join (開始または結合) (BEGIN_OR_JOIN
)
INDIFFERENT
と同じ動作となります。
次の例では、エラーハンドラーが Try スコープ内にあり、スコープの実行後にエラーが発生します。
<flow name="someFlow">
<jms:listener config-ref="JMS_Config" destination="test.in" transactionalAction="ALWAYS_BEGIN"/>
<!-- Processors -->
<try transactionalAction="${action}">
<!-- Processors -->
<!-- Join if possible is the default value for jms:publish operation -->
<jms:publish config-ref="JMS_Config" destination="test.out"/>
<!-- More Processors -->
<!-- There could be a component that raises an error, it will be handled by the error handler -->
<error-handler>
<on-error-continue/>
</error-handler>
</try>
<!-- Processors -->
<raise-error type="APP:SOME"/>
</flow>
設定されている transactionalAction
に従って、Try スコープ内の動作は次のいずれかになります。
Ignore (無視) (INDIFFERENT
)
トランザクションは続行しますが、エラーはフローレベルの on-error-continue
では処理されないため、トランザクションがロールバックされ、メッセージは送信されません。
Always Begin (常に開始) (ALWAYS_BEGIN
)
アクティブなトランザクションがすでに存在するため、エラーが発生します。
Begin or Join (開始または結合) (BEGIN_OR_JOIN
)
INDIFFERENT
と同じ動作となります。
フローを設計するときは、Try スコープの内部でエラーが発生しやすい操作をグループ化します。Try スコープにより、フローで問題を起こす可能性のある操作を隔離して、エラー処理メソッドに割り当てることができます。また、Try スコープ内の操作をトランザクションとして処理するように設定することもできます。
Try スコープはエラー処理戦略を持ち、フローのエラー処理を設定するのと同じように設定できます。
Try スコープは、さまざまなエラー種別の条件を見極めて、異なる動作を適用します。Try スコープ内のコンポーネントでエラーが発生すると、Try スコープのエラーハンドラーが実行されます。この時点で、エラーを調査することができ、ハンドラーは状況に応じて実行および動作できます。
On Error Continue
実行後に結果をコンテナ Try スコープに送信します。コンテナ Try スコープは、渡された結果を使用して実行を正常に完了します。この時点でのトランザクションはすべてコミットされます。
On Error Propagate
すべてのトランザクションをロールバックし、実行後に結果を使用して既存のエラーを再びスローします。これにより、コンテナ Try スコープの実行は失敗します。