Expression Manager 構築ブロックの仕組み

Expression Manager 構築ブロックは、サーバー側式評価とクライアント側式評価という 2 つのモジュールに分類されます。このモジュール全体のアーキテクチャを以下の図に示します。

フルサイズのグラフィックを表示
Expression Management アーキテクチャ

サーバー側式評価

サーバー側式評価モジュールを使用すると、サーバー側で式を評価できます。

Expression evaluator サービスは、サーバー側式評価モジュールのコア部分です。式の評価と検証のための API が提供されます。式は単独モードでもバッチモードでも評価可能です。このコンポーネントは、式評価ライブラリ(JSP EL)のラッパーとして動作します。実際の式評価タスクは、式ライブラリに委任されます。

式評価サービスは、Variable Resolver のインスタンスを介して、式内で参照された変数の値を取得します。通常、式に使用されている関数の参照は Function Mapper を使用して実際の関数に解決され、その実際の関数が式評価サービスによって呼び出されます。式に使用されている変数の値をデータディクショナリのインスタンスのプロパティから取得するユースケースとして、Data Dictionary 構築ブロックには、Variable Resolver の実装が用意されており、アプリケーションから利用することができます。

  • Variable Resolver: 式に使用している変数の値を式評価ライブラリが取得する際に使用されます。

  • Function Mapper: 式に含まれている関数の参照を、実際に呼び出すことのできる関数へと解決するために使用されます。

Flex を使用したクライアント側式評価

クライアント側式評価モジュールを使用すると、サーバーを経由せずに、Flex クライアントアプリケーション内で式を評価できます。 Flex Expression Manager は、JSP-EL 準拠の式をクライアント側で解釈し評価することができます。 IExpressionManager インターフェイス(com.adobe.solutions.exm.runtime.IExpressionManager)が、クライアント側式評価のエントリポイントとなります。 それを利用するアプリケーションは、JSP-EL に準拠した式を渡すことが求められます。 アプリケーションは、assignTo() またはいずれかの manage*() メソッドを使用して、ターゲット変数を IExpressionManager インスタンスに渡すこともできます。アプリケーションは、IComputedExpression インスタンスを取得することによって式の最終的な評価を得ます。ターゲット変数を Expression Manager に渡した場合、式の再計算時に、その評価結果に基づいて変数が自動的に設定され、更新されます。 クライアント側の Expression Manager は、Variable Resolver と Function Mapper を介して、式に含まれている変数の参照と関数の呼び出しを解決します。

Expression Manager によって呼び出し元のアプリケーションに返される IComputedExpression インスタンスは、式の評価結果を格納する即時性のコンテナーとして機能します。 このコンテナーは、式の再計算イベントが発生するたびに自動的(即時的)に更新されるバインド可能な value プロパティ(式の評価結果)を保持しています。 このようなイベントの例として、式に使用されている変数の値の変化や、非同期のリモート関数呼び出しの正常終了が挙げられます。 また、IComputedExpression インスタンスは、computationErrorEvent という名前の event(com.adobe.solutions.exm.runtime.ComputationErrorEventのインスタンス)を送出します。 非同期のリモート関数呼び出しでエラーが発生するなど、式の評価時にエラーが発生すると必ずこのイベントが送出されます。 イベントのエラープロパティには、評価中に発生したエラーが格納されます。

IComputedExpression インスタンスは、アプリケーションから次の 2 とおりの方法で使用できます。
  • 式の評価が一回限りの単純なユースケースの場合、アプリケーションは、IComputedExpression インスタンスの value プロパティを直接読み取ることができます。 本質的に非同期的に実行されるリモート関数呼び出しを含んだ式では、このメカニズムはうまく機能しません。 IComputedExpression インスタンスから最初に読み取られる value プロパティの値は、意味のあるデータではありません。この値は、リモート関数呼び出しが正常に終了したときに初めて正しい値へと自動的に更新されます。

  • 長時間にわたって実行されるユースケースの場合、アプリケーションは、標準の Flex バインドを使用して、IComputedExpression インスタンスの value プロパティにバインドできます。 例えば、ユーザーインターフェイスのフィールドを式の評価結果にバインドすることができます。 アプリケーションは、IComputedExpression インスタンスで「computationErrorEvent」型のイベントをリスンすることによって、式の評価中に発生したエラーを検出します。本質的に非同期的に実行されるリモート関数呼び出しを含んだ式では、このバインディングによるメカニズムが唯一の方法となります。

com.adobe.solutions.exm.runtime.impl.ExpressionManagerImpl クラスは、IExpressionManager インターフェイスのデフォルトの実装です。 アプリケーションからは、このクラスのインスタンスを作成して、Variable Resolver と Function Mapper を使って設定し、それを式の評価に使用することになります。