オブジェクトストアの定義の例 - Mule 4

オブジェクトストアをアプリケーションでグローバルに定義して、名前による参照や、複数コンポーネント間での共有を可能にすることができます。または、特定のコンポーネント用のオブジェクトストアを作成できます。

すべてのオブジェクトストア操作は、グローバルオブジェクトストアを参照できます。たとえば、特定のユーザーが現在認証済みであるかどうかを確認する監査フローでは、アプリケーションで定義したオブジェクトストアを参照できます。

<os:contains id="#[userId]" objectStore="tokensStore" />

グローバルオブジェクトストアの定義

グローバルオブジェクトストアの使用は以下に適しています。

  • コンポーネント間での状態の共有

    オブジェクトストアは名前で参照されるため、複数のコンポーネントが使用できます。設定がわずかに異なる Salesforce Connector の 2 つのインスタンスがあるとします。両方の Salesforce Connector インスタンスに同じトークンを使用して、再認証を回避できます。

  • クラスターノード間での状態の共有

    クラスターモードで Mule を使用し、情報をクラスターのすべてのノードで使用できるようにします。

  • アプリケーションのロジックでの情報の使用

    Object Store Connector はオブジェクトストアを定義するだけでなく操作できます。

グローバルオブジェクトストアは、最上位要素として定義され、他のコンポーネントはその名前を参照できます。次の例では、アクセストークンを保存するために ​tokensStore​ という名前のオブジェクトストアを作成します。

<os:object-store name="tokensStore"
  entryTtl="1"
  entryTtlUnit="HOURS"
  maxEntries="100"
  persistent="true"
  expirationInterval="30"
  expirationIntervalUnit="MINUTES" />

この例はメモリ内のオブジェクトストア用であり、アクセストークンを保存するオブジェクトストアの推奨設定を示しているわけではありません。

  • 永続性 (​persistent="true"​)

    値はディスクに保存され、システムが再起動しても存続できます。​persistent​ を ​false​ に設定すると、情報をメモリ内にのみ保存する一時的なストアになります。

  • 有効期限 (​expirationInterval​)

    有効期限スレッドは 30 分おきに実行され、存続期間 (TTL) または ​maxEntries​ 制限を超えた要素を破棄します。

  • TTL (​entryTtl​) が 1 時間以上

    アクセストークンは非常に機密性が高いので、1 時間以上保持しない方がよいでしょう。​entryTtl​ で指定された値を超えるすべてのエントリは自動的に削除されます。

  • サイズ制限 (​maxEntries​)

    100 エントリを超える各エントリは、有効期限スレッドが実行されると破棄されます。

Object Store v2​ では無制限のキーを使用できます。

OAuth による認証の設定

次の例では、OAuth による Salesforce Connector 認証を設定し、その後で​前の例​で作成したオブジェクトストア (​tokensStore​) にトークンを保存しています。

<sfdc:config-with-oauth name="salesforce-oauth"
  consumerKey="${salesforce.consumerKey}"
  consumerSecret="${salesforce.consumerSecret}">
    <sfdc:oauth-callback-config domain="localhost" localPort="8082"
      remotePort="8082" path="callback" connector-ref="HTTP_HTTPS" />
    <sfdc:oauth-store-config objectStore="tokensStore" />
</sfdc:config-with-oauth>

非公開オブジェクトストアの定義

非公開オブジェクトストアは、次の場合に使用します。

  • 共有状態がセキュリティリスクになる。

  • 誰もコネクタレベルからストアを操作できないようにする必要がある。たとえば、​Clear​ 操作の設定をすべての認証データが削除されるように誰かが変更するリスクを避ける必要がある場合です。

次の例では、参照可能な名前のない非公開オブジェクトストアを定義します。

<idempotent-message-validator idExpression="#[payload]"
  valueExpression="#[payload]">
    <os:private-object-store
                entryTtl="20"
                entryTtlUnit="MILLISECONDS"
                maxEntries="20"
                persistent="false"
                expirationInterval="20"
                expirationIntervalUnit="MILLISECONDS"/>
</idempotent-message-validator>

この例では、冪等性のあるメッセージ検証機能と、バリデーターのみがアクセスできるカスタムストアを提供しています。