---
schema_version: "1"
id: fcbd2e688cbb5d65ae3f75c11a0b49ccbff72e4ed06877717ef0b9a4430853ae
title: Try スコープ (<try/>)
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/anypoint-code-builder/acb-component-try.md
canonical_url: https://docs.mulesoft.com/jp/anypoint-code-builder/acb-component-try
source_site: docs.mulesoft.com
content_type: documentation
content_hash: d0741782e4e11069da75a3d138d1f6183a419072c81d104d8fb7e982bf6e1558
description: MuleSoft Documentation Site
latest: true
---
# Try スコープ (<try/>)

![logo cloud IDE](/mulesoft/current/ja-jp/_/img/logos/deployment-cloud-ide.png "Cloud IDE") Cloud IDE

![logo desktop IDE](/mulesoft/current/ja-jp/_/img/logos/deployment-desktop-ide.png "Desktop IDE") Desktop IDE

スコープ内のコンポーネントの実行中に発生する可能性のあるエラーを処理します。

Try スコープは、スコープに追加したコンポーネントによってスローされた例外をキャッチして処理します。スコープ内のエラー処理は、Flow コンポーネント内のエラー処理と似ています。個別のフローを設定する代わりに、Flow コンポーネント内で Try を使用できます。

ペイロードを変更したり、変数を追加、変更、または削除したりすると、実行の残りの部分に伝播されます。エラーハンドラー内での変更も伝播されます。

Try スコープではトランザクションがサポートされています。トランザクションとは、正常に実行される必要がある一連のアクションです。エラーが伝播されてトランザクションがロールバックされるか、またはエラーが処理されてトランザクションがコミットされるかによって、成功または失敗する 1 つの単位として Try スコープ内のコンポーネントを設定します。どちらの場合でも、Try スコープを含むフローは処理を続行します。

## [](#component-xml)コンポーネント XML

このコンポーネントは、次の XML 構造をサポートします。

```xml
<try
  doc:name="Try"
  doc:id="dieaig"
  transactionalAction="${action}" />
```

Try スコープ (​`<try/>`​) 属性は UI および XML で設定できます。

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 20%;">
<col style="width: 20%;">
<col style="width: 60%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">属性名</th>
<th class="tableblock halign-left valign-top">属性 XML</th>
<th class="tableblock halign-left valign-top">説明</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Try (試行)</strong>​ (デフォルト)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>doc:name</code></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>キャンバスに表示されるコンポーネントの編集可能な名前。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">なし</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>doc:id</code></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>コンポーネントの自動生成された識別子。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Transaction type (トランザクション種別)</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>transactionType</code></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>トランザクションの種別を指定します。可能な値:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>LOCAL</code>​</p>
<div class="paragraph">
<p>デフォルト。単一またはローカルトランザクション。</p>
</div>
</li>
<li>
<p><code>XA</code>​</p>
<div class="paragraph">
<p>複数のリソースからの操作をグループ化し、拡張アーキテクチャ (XA) 標準に準拠するトランザクション。</p>
</div>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Transactional action (トランザクションアクション)</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>transactionalAction</code></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>トランザクションの処理方法を定義します。可能な値:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Ignore (無視) (​<code>INDIFFERENT</code>​)</p>
<div class="paragraph">
<p>デフォルト。トランザクションがアクティブであれば、スコープがトランザクションに結合します。そうでない場合は、スコープはトランザクションを作成しません。</p>
</div>
</li>
<li>
<p>Always Begin (常に開始) (​<code>ALWAYS_BEGIN</code>​)</p>
<div class="paragraph">
<p>スコープを実行する度に、新しいトランザクションが開始されます。</p>
</div>
</li>
<li>
<p>Begin or Join (開始または結合) (​<code>BEGIN_OR_JOIN</code>​)</p>
<div class="paragraph">
<p>実行順序が (フロー外で発生する非同期アクションなどによって) 変化する場合にのみ適用されます。
フローの現在の処理ですでにトランザクションが開始されている場合は、スコープはそのトランザクションに結合します。そうでない場合は、スコープは新しいトランザクションを開始します。</p>
</div>
</li>
</ul>
</div></div></td>
</tr>
</tbody>
</table>

## [](#例)例

次の例は、異なる状況でトランザクションを処理するために Try スコープを設定する方法を示しています。

### [](#example1)例: Try スコープでの異なるトランザクションアクション

次の例は、フローレベルでトランザクションを開始するように設定された ​`jms:listener`​ 操作、トランザクションを (設定に従って) 開始または結合しようとする Try スコープ、そしてトランザクションの外部で実行するように設定された ​`jms:publish`​ 操作を示しています。

```xml
<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`​ の場合と同じです。

### [](#example2)例: フローレベルでのエラー処理

次の例には、フローレベルのエラーハンドラーが含まれています。

次の例では、エラーハンドラーをフローレベルで追加しています。

```xml
<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`​ と同じ動作となります。

### [](#example3)例: Try スコープ内のエラー処理

次の例では、エラーハンドラーが Try スコープ内にあり、スコープの実行後にエラーが発生します。

```xml
<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`​ と同じ動作となります。

## [](#error-handling)エラー処理

フローを設計するときは、Try スコープの内部でエラーが発生しやすい操作をグループ化します。Try スコープにより、フローで問題を起こす可能性のある操作を隔離して、エラー処理メソッドに割り当てることができます。また、Try スコープ内の操作をトランザクションとして処理するように設定することもできます。

Try スコープはエラー処理戦略を持ち、フローのエラー処理を設定するのと同じように設定できます。

Try スコープは、さまざまなエラー種別の条件を見極めて、異なる動作を適用します。Try スコープ内のコンポーネントでエラーが発生すると、Try スコープのエラーハンドラーが実行されます。この時点で、エラーを調査することができ、ハンドラーは状況に応じて実行および動作できます。

- On Error Continue
    
    実行後に結果をコンテナ Try スコープに送信します。コンテナ Try スコープは、渡された結果を使用して実行を正常に完了します。この時点でのトランザクションはすべてコミットされます。
- On Error Propagate
    
    すべてのトランザクションをロールバックし、実行後に結果を使用して既存のエラーを再びスローします。これにより、コンテナ Try スコープの実行は失敗します。

## [](#see-also)関連情報

- [Single Resource Transactions](https://docs.mulesoft.com/mule-runtime/latest/single-resource-transaction)
- [XA Transactions](https://docs.mulesoft.com/mule-runtime/latest/xa-transactions)