ビジネス ルール フレームワークのアーキテクチャ
次の図に、ビジネス ルール フレームワークのコンポーネント アーキテクチャを示します。
Microsoft ビジネス ルール フレームワークのアーキテクチャ
ここでは、このフレームワークの一部のコンポーネントについて説明します。
Policy クラス
Policy オブジェクトはビジネス ポリシーの 1 つのインスタンスであり、ルールベースのアプリケーションで使用されるインターフェイスを提供します。 このオブジェクトで提供される抽象化により、ルール ストアの場所をアプリケーション開発者が配慮する必要がなくなり、ルール ストアからのルール セットの抽出、基になるルール エンジンのインスタンスのインスタンス化、長期間のファクトのエンジンへのアサートが可能になります。 多くのシナリオでは、ルールベースのアプリケーションで Policy オブジェクトの同時実行インスタンスが使用されます。 これらの同時インスタンスでは、同一ポリシーを表すことも、同一ポリシーの複数バージョンを表すことも、異種ポリシーの複数バージョンを表すこともあります。
RuleEngine クラス
RuleEngine オブジェクトは、ビジネス ポリシーの実行エンジンとして機能します。 このオブジェクトは、3 つのプラグイン コンポーネント (変換者、推論エンジン、および追跡インターセプター) を実装に使用します。 RuleEngine オブジェクトは、ビジネス ポリシーを表す RuleSet オブジェクトを入力として受け取り、ルール セットに対して構成されたトランスレーター、推論エンジン、追跡インターセプターを使用して、ルール セットによって定義されたビジネス ポリシーを実装します。
ファクト レトリバー
ファクト取得コンポーネントは、ユーザーによって定義される省略可能なプラグイン コンポーネントであり、ビジネス ポリシーによって使用される長期間のファクトを収集します。 詳細については、「 ファクト レトリバーを作成する方法」を参照してください。
実行前に、 Policy オブジェクト インスタンスは RuleEngine インスタンスをファクト レトリバーに提供し、ルール エンジンの作業メモリ内のファクトのセットを更新する機会を提供します。 詳細については、「 短期ファクトと Long-Term ファクト」を参照してください。
ルール エンジン更新サービス
ルール エンジン更新サービスは、分散環境でビジネス ポリシーの動的な更新を可能にします。 自動的に起動する Microsoft Windows NT サービスのアプリケーションでは、ビジネス ポリシーが変更された場合に発生するポリシー展開イベントと展開解除イベントをサブスクライブする必要があります。
一般的な企業シナリオでは、ビジネス ポリシーの展開は、更新、テスト、およびバージョン管理の後で行われます。 展開とは、更新されたポリシーをセキュリティで保護された永続的なルール ストアに追加して、必要に応じてストアに対してロジックを実行し、更新されたポリシーに関する情報をすべての関係者に公開することを指します (公開されるのはポリシー自体ではなく、ポリシーに関する情報です)。
ルール ベース アプリケーションのホスト サーバーで実行されるルール エンジン更新サービスは、ポリシー更新通知を受信し、これらの情報を後で使用できるようにキャッシュします。 ポリシーの更新に公開/サブスクライブ モデルを使用すると、サービスのダウンタイムまたは中断を生じることなく、ビジネス ポリシーをほぼリアルタイムで変更できます。
ポリシー/ボキャブラリ作成ツール
Microsoft BizTalk Server のビジネス ルール作成ツールは、エンド ユーザーと開発者の両方にポリシーとボキャブラリの作成機能を提供します。
ルール ストア
ルール ストアは、ビジネス ポリシーとボキャブラリのリポジトリです。 このリポジトリは、簡単なファイルである場合も、安全性、拡張性、持続性、および信頼性の高い Microsoft SQL Server などのデータベースである場合もあります (SQL Serverは、フレームワークの既定のルール ストアとして使用されます)。
キャッシュ
ビジネス ルール エンジン フレームワークには、 RuleEngine インスタンスのキャッシュ メカニズムが用意されています。 各 RuleEngine インスタンスには、特定のポリシー バージョンのメモリ内表現が含まれています。
次の手順では、新しい Policy インスタンスがインスタンス化されるプロセスについて説明します (API での呼び出しまたは 呼び出し規則 図形の実行)。
Policy オブジェクトは、ルール エンジン キャッシュから RuleEngine インスタンスを要求します。
ポリシー バージョンの RuleEngine インスタンスがキャッシュに存在する場合、 RuleEngine インスタンスは Policy オブジェクトに返されます。 RuleEngine インスタンスが使用できない場合、キャッシュによって新しいインスタンスが作成されます。 RuleEngine インスタンスがインスタンス化されると、ポリシー バージョン用に構成されている場合は、新しいファクト レトリバー インスタンスが作成されます。
Policy オブジェクトで Execute メソッドが呼び出されると、次の手順が実行されます。
Policy オブジェクトは、ファクト レトリバーが存在する場合、ファクト レトリバー インスタンスに 対して UpdateFactsメソッドを呼び出します。 ファクト レトリーバーの メソッドの実装により、 RuleEngine のワーキング メモリに長期的なファクトがアサートされる場合があります。
Policy オブジェクトは、Execute 呼び出しで渡された Array に含まれる短期的なファクトをアサートします。
Policy オブジェクトは、RuleEngine で Execute を呼び出します。
RuleEngine は実行を完了し、Policyオブジェクトに制御を返します。
Policyオブジェクトは、RuleEngine から短期的なファクトを取り消します。 ファクト取得コンポーネントによってアサートされた長期間のファクトは、ルール エンジンの作業メモリに残ります。
Policy オブジェクトで Dispose メソッドが呼び出されると、RuleEngine インスタンスがルール エンジン キャッシュに解放されます。
ルール エンジンのキャッシュは、読み込みで必要な場合、特定のポリシー バージョンに関して複数のルール エンジン インスタンスを保持し、各ルール エンジン インスタンスはそれぞれ独自のファクト取得コンポーネント インスタンスを保持します。