---
schema_version: "1"
id: 8725936d6d72d6fc23ac96e64ad46837c7859837e41c7f081d53aad10db37ac3
title: Mule SDK を使用したスコープの作成
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/mule-sdk/1.1/scopes.md
canonical_url: https://docs.mulesoft.com/jp/mule-sdk/1.1/scopes
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 061b4a65c6784834b65d856ac98654b739b1192de833448d00575bad5a7ce699
description: MuleSoft Documentation Site
release: "1.1"
latest: false
---
# Mule SDK を使用したスコープの作成

スコープは​[操作](https://docs.mulesoft.com/jp/mule-sdk/1.1/operations)​と似ていますが、これらの実行には、他の子​[操作](https://docs.mulesoft.com/jp/mule-sdk/1.1/operations)​の実行が含まれます。つまり、スコープは基本的に 1 つの ​`Chain`​ コンポーネントおよび ​`CompletionCallback`​ と共に 1 つ以上の引数 (単純な​[パラメーター](https://docs.mulesoft.com/jp/mule-sdk/1.1/parameters)​) を受け取る操作です。

`Chain`​ は、スコープ内で宣言し、抽象化して実行する子​[操作](https://docs.mulesoft.com/jp/mule-sdk/1.1/operations)​を表します。

## [](#スコープの宣言)スコープの宣言

このデコレーターの例では、スコープの基本構造がわかります。これには、実行される ​`Chain`​ と、スコープの実行が完了すると呼び出される ​`CompletionCallback`​ があります。​ _(yes, すべてのスコープは[非ブロック操作として宣言されます。](https://docs.mulesoft.com/jp/mule-sdk/1.1/non-blocking-operations))_:​

```java
@Extension(name = "Docs")
@Operations(LogDecorator.class)
public class DocsModule {

}
```

```java
public void logDecorator(Chain operations,
                         CompletionCallback<Object, Object> callback) {

  LOGGER.debug("Invoking child operations")
  operations.process(
    result -> {
      LOGGER.debug(result.getOutput());
      callback.success(result);
    },
    (error, previous) -> {
      LOGGER.error(error.getMessage());
      callback.error(error);
    });
}
```

もちろん、​[操作](https://docs.mulesoft.com/jp/mule-sdk/1.1/operations)​の ​`Chain`​ を受け取る場合、何らかの方法でそれらを実行する必要があります。それが ​`process(successCallback, errorCallback)`​ で実行される内容です。 この例では、これを使用して、非ブロック形式で ​`Chain`​ を実行し、成功またはエラーの場合に結果をリスンします。ここでは、​`Chain`​ の​_すべて_​の​[操作](https://docs.mulesoft.com/jp/mule-sdk/1.1/operations)​の実行が成功すると、その実行結果を使用して ​`successCallback`​ がコールされます。​_いずれかの_​子​[操作](https://docs.mulesoft.com/jp/mule-sdk/1.1/operations)​の実行中にエラーが発生すると、エラーと最後の成功結果の両方を引数として ​`errorCallback`​ がコールされます。

Mule アプリケーションでスコープを使用する例を次に示します。

```xml
<flow name="logDecoratorSampleFlow">
    <docs:log-decorator>
        <http:request config-ref="config" path="/" method="GET"/>
    </docs:log-decorator>
</flow>
```

これにより、​`LOGGER`​ の呼び出しでラップされた ​`http:request`​ 子操作が実行されます。 他のスコープやルーターが含まれるスコープ内で任意の数の​[操作](https://docs.mulesoft.com/jp/mule-sdk/1.1/operations)​を実行できます。

## [](#パラメーターの追加)パラメーターの追加

スコープは、他の単純な ​`@Parameters`​ および ​`@ParameterGroups`​ を受け取ることができます。スコープは子要素として宣言される​_複雑な_​パラメーターを受け取ることができないため、これらは​_単純_​です。たとえば、デコレーターのログレベルをカスタマイズする場合、それをパラメーターとして受け取ることができるようになります。

```java
public void logDecorator(@Optional(defaultValue="true") boolean debug,
                         Chain operations,
                         CompletionCallback<Object, Object> callback) {

  if (debug){
    LOGGER.debug("Invoking child operations")
  }
  operations.process(
    result -> {
      Object message = result.getOutput();
      if (debug){
        LOGGER.debug(message);
      } else {
        LOGGER.info(message);
      }
      callback.success(result);
    },
    (error, previous) -> {
      LOGGER.error(error.getMessage());
      callback.error(error);
    });
}
```

スコープの API の変更は最小限です。

```xml
<flow name="logDecoratorSampleFlow">
    <docs:log-decorator debug="false">
        <http:request config-ref="config" path="/" method="GET"/>
    </docs:log-decorator>
</flow>
```

デフォルトでは、コンテナスコープで受信したメッセージを使用して ​`Chain`​ が実行されますが、​`process`​ メソッドの他の定義を使用すると、スコープのユーザーは、​`Chain`​ の実行に使用されるペイロードや属性をカスタマイズできます。

## [](#ステレオタイプの使用)ステレオタイプの使用

`Stereotypes`​ を使用すると、​`Chain`​ 内に存在できる​[操作](https://docs.mulesoft.com/jp/mule-sdk/1.1/operations)​を制限できます。これにより、その用途の一貫性を確保できます。特定の ​`Stereotypes`​ のある​[操作](https://docs.mulesoft.com/jp/mule-sdk/1.1/operations)​のみをスコープ内で宣言できます。

```java
public void assertAll(@AllowedStereotypes(AssertionStereotype.class) Chain assertions,
                @Optional boolean failOnError,
                CompletionCallback<Boolean, Void> callback) {
  assertions.process(
    result -> {
      callback.success(Result.<Boolean, Void>builder().output(true).build());
    },
    (error, previous) -> {
      if (failOnError){
        callback.error(error);
      } else {
        callback.success(Result.<Boolean, Void>builder().output(false).build());
      }
    });
}
```

```xml
<flow name="logDecoratorSampleFlow">
    <docs:assert-all>
      <docs:not-null value="#[payload]">
      <docs:not-empty-collection value="#[payload]">
    </docs:assert-all>
</flow>
```

## [](#設定と接続には非対応)設定と接続には非対応

スコープには、​[操作](https://docs.mulesoft.com/jp/mule-sdk/1.1/operations)​とは異なる制限があります。定義上、スコープは特定の​[設定](https://docs.mulesoft.com/jp/mule-sdk/1.1/configs)​や​[接続](https://docs.mulesoft.com/jp/mule-sdk/1.1/connections)​に依存したり、それらを受け取ったりすることはできません。

## [](#1-つの-chain-のみ)1 つの Chain のみ

`Chain`​ コンポーネントはスコープの定義のキーであるため、1 つの ​`Chain`​ 引数​_のみ_​が含まれている​_必要_​があります。

## [](#常に非ブロック)常に非ブロック

すべてのスコープは、それらの結果を伝えるために ​`CompletionCallback`​ を受け取る ​`void`​ メソッドとして定義されている必要があります。つまり、すべてのスコープはデフォルトで非ブロックになります。

[「非ブロック操作」](https://docs.mulesoft.com/jp/mule-sdk/1.1/non-blocking-operations)​を参照してください。