Oracle® Fusion Middleware Oracle Business Process Managementによるビジネス・ルールの設計 12c (12.2.1) E72523-01 |
|
前 |
次 |
この章では、ビジネス・ルールの概念と、Oracle Business Rulesのランタイム要素およびデザインタイム要素(ファクト、値セット、ルールセット、デシジョン表、Oracle BP Composer、Oracle SOAコンポーザなど)について説明します。Oracle Business Rules Engineのアーキテクチャについても説明します。
この章の内容は次のとおりです。
詳細は、次を参照してください。
Oracle Business Process Management Rulesランゲージ・リファレンス
Oracle Fusion Middleware Oracle Business RulesのJava APIリファレンス
『Oracle SOAスイートでのSOAアプリケーションの開発』
Oracle Business Rulesによって、ビジネス・アナリストおよび開発を行わない人々が、プログラミングを行うことなくビジネス・ロジックを簡単に定義および変更できるようになり、プロセスおよびアプリケーションの柔軟性が高まります。Oracle Business Rulesでは、統合JDeveloperデザイン・プラットフォームを活用し、関連するプロセスまたはアプリケーションの外部でビジネス・ルールをメンテナンスすることで、迅速かつ容易なルール変更が可能になり、以降の再デプロイ・コストが削減されます。
Oracle Business Rulesを使用することで、ポリシー、計算および推論を自動化するとともに、基礎となるアプリケーション・コードからルール・ロジックを分離できます。これにより、より迅速なルール・メンテナンスが可能になり、ビジネス・アナリストは、プログラマによる支援を受けたりビジネス・プロセスを中断させることなく、ルール・ロジックを変更できるようになります。
ビジネス・アナリストは、Process Composerでルールをモデル化し、Process Studioでプロセスをさらに調整して完成できます。
IT開発者はBPM Studioを使用し、既知のデータ型、サービス、およびヒューマン・タスクの実装が含まれているそのビジネス・カタログと対話します。その後、開発者はプロジェクトを作成し、それをビジネス・カタログに公開します。そして、ビジネス・アナリストまたはビジネス・ユーザーはProcess Composerを使用して、ビジネス・カタログ内のプロジェクトをチェックアウトし、既存のプロセス・モデルに変更を加えることができます。
少数のルールを使用する単純な計算のモデル化を必要としているユーザーがいる一方で、複雑な意思決定のためにルールを使用しており、デシジョンのモデル化の問題に対処する方法を必要としているユーザーもいます。
Oracle Business Rulesには、エンタープライズ全体にわたるルールの検出、ガバナンス、バージョニング、トレース機能および可用性のためのルール・エディタ、ルール・ブラウザ、ルール・エンジンおよびルール・リポジトリが含まれています。ビジネス・ルールは、ビジネス・ルール・エディタを使用して定義され、一元化されたビジネス・ルール・リポジトリに格納されて管理されます。モデラー内の事前定義済ビジネス・プロセス・ルールを参照できます。ビジネス・プロセス・モデル内のビジネス・ルール・アクティビティは、デシジョン・サービスに変換され、それによって実行可能ビジネス・プロセス内のビジネス・ルール・エンジンが起動されます。ビジネス・ユーザーは、ビジネス・プロセスを再デプロイしたり再実装することなく、直感的なWebブラウザ・インタフェースを使用してその場でこれらのビジネス・ポリシーを変更できます。
Oracle Business Rulesは、迅速性、ビジネス制御および透過性の要件に対応する高性能かつ軽量なビジネス・ルール製品です。
ビジネス・ルールとは、ビジネス・ポリシーを記述した文、または重要なビジネス・デシジョンを記述した文のことです。たとえば、ビジネス・ルールには次のものが含まれます。
消費ポリシーや承認マトリックスなどのビジネス・ポリシー
金融機関であれば、次のようなビジネス・ルールを使用します。
有効な構成や規制上の要件などの制約
たとえば、レンタカー会社であれば、次のようなビジネス・ルールを使用します。
割引や割増などの計算
顧客の額に基づくオファーなどの判断機能
航空会社であれば、次のようなビジネス・ルールを使用します。
これらの例は、それぞれ個別のビジネス・ルールを示しています。実際には、Oracle Business Rulesを使用して、多数のビジネス・ルールを組み合せたり、さらに複雑なテストを使用できます。
たとえば、レンタカー会社の例では、ルールにDriver Age Ruleという名前を指定できます。Driver Age Ruleなどのルールは、従来、アプリケーション・コードに組み込まれ、Javaアプリケーションでは、次のように表示されていました。
public boolean checkDriverAgeRule (Driver driver) { boolean declineRent = false; int age = driver.getAge(); if( age < 21 ) { declineRent = true; } return declineRent; }
技術的な知識のないユーザーにとっては、このようなコードを理解し、変更することは困難な場合があります。たとえば、レンタカー会社がポリシーを変更し、Driver Age Ruleを使用して18歳未満のすべての運転者を拒否するとします。多くの本番環境では、開発者がアプリケーションを変更し、変更したアプリケーションを再コンパイルして再デプロイする必要があります。ビジネス・アナリストが、ほとんどプログラマの援助なしに、ビジネス・ルールで表現されたポリシーを変更できるため、このプロセスは簡素化されます。Oracle Business Rulesを使用するアプリケーションでは、新しい政府規制や、社内プロセスの改善、顧客およびサプライヤの関係の変化にアプリケーションが対応できるよう、継続的な変更がサポートされます。
ビジネス・ルールには、次のものを含める必要があります。
ルールセット: ルールの結果を決定する条件またはアクションのセット。
ファクト: ルールセットによって使用されるデータ・オブジェクト。
デシジョン関数: ルールを実行するコードへの参照。
また、ビジネス・ルールには、次のものを含める場合があります。
関数: ルールセット内で呼び出すことができる関数。このタイプの関数の1つの例は、データ・オブジェクトを初期化するものです。
グローバル: ルールセット内で使用されるデータ・オブジェクト。定数の場合もあります。
値セット: 条件によって使用される値のリストまたは範囲。
リンク: 他のビジネス・ルール・ディクショナリへのリンク。
後続の項で、これらのコンポーネントについて詳しく説明します。
Oracle Business Rulesでは、ルールは、ファクト・タイプに関して記述します。各ファクトはファクト・タイプのインスタンスです。ルールを作成する前に1つ以上のファクト・タイプをインポートまたは作成する必要があります。ただし、動詞ルールを使用する場合は、実行可能ルールを定義するまでファクト・タイプのモデル化を遅延することもできます。
Oracle Business Rulesでは、FactTypeはデータ・モデルにおけるタイプ定義であり、ファクトはそのタイプのインスタンスです。たとえば、ルールはファクト・タイプに関して記述されます。Oracle Business Rulesランタイム、またはRL Languageを記述する開発者は、RL Languageのassert
関数を使用してファクトのインスタンスをOracle Business Rulesに追加します。ルール・デザイナでは、XMLスキーマ、Javaクラス、Oracle RL定義、ADFビジネス・コンポーネント・ビュー・オブジェクトに基づいて、様々なファクト・タイプを定義できます。
値セットを作成し、指定したタイプの値リストまたは値範囲を定義できます。作成した値セットは、一致するタイプのファクト・プロパティに関連付けることができます。Oracle Business Rulesでは、定義した値セットを使用して、ルールまたはデシジョン表内のファクト・プロパティに関連した値に対する制約が指定されます。また、値セットを使用して、変数の初期値、関数の戻り値および関数の引数の値に対して制約を指定することもできます。
詳細は、次を参照してください。
ルールセットは、IF-THENルールおよびデシジョン表に使用されるOracle Business Rulesコンテナです。ルールセットは、ルールおよびデシジョン表に対してJavaパッケージに似たネームスペースを提供します。またルールセットを使用して、ルールの起動を部分的に順序付けることも可能です。
詳細は、次を参照してください。
Oracle Business Process Managementのルール・ランゲージ・リファレンスのルールの起動の順序付けに関する項
ディクショナリは、ファクト、ビジネス・フレーズ、関数、グローバル、値セット、リンク、デシジョン関数およびルールセットに使用するOracle Business Rulesコンテナです。また、アプリケーションのルールセットおよびデータ・モデルが格納されているXMLファイルです。ディクショナリは他のディクショナリにリンクできます。Oracle JDeveloperでは、Oracle Business Rulesディクショナリが.rules
ファイルで作成されます。必要な数のディクショナリを作成できます。1つのディクショナリに多数のルールセットを含めることができます。詳細は、「ディクショナリとディクショナリ・リンクの概要」を参照してください。
グローバルは、ビジネス・ルール内のどの場所からでもアクセスできる変数または定数です。グローバルを作成するときには、ビジネス・ユーザーがルール・ロジックに触れることなくルールの動作を変更できるようにする必要があります。
デシジョン関数は、JavaまたはSOAから(SOA/BPMコンポジット・アプリケーションから、またはコンポジット・アプリケーション内のコンポーネントから)ルールを起動するための規定を提供します。規定には、入力ファクト・タイプ、実行するルールセットおよび出力ファクト・タイプが含まれます。詳細は、「デシジョン表の使用」を参照してください。
Oracle Business Rules SDK (Rules SDK)によってAPIが提供されます。このAPIを使用して、Oracle Business Rulesディクショナリ内のルール(およびディクショナリのすべてのコンテンツ)にアクセス、作成、変更および実行するアプリケーションを作成できます。Rules SDKは、Javaアプリケーションからルールまたはデシジョン表にアクセスおよび実行するデシジョン・ポイントAPIを提供します。詳細は、「スタンドアロン(非SOA/BPM)シナリオでのルールの使用」を参照してください。
Oracle Business Rulesでは、ルールの作成に複数の方法が用意されています。ルールは、異なる方法(IF/THENルールとして、およびデシジョン表として)でモデル化できます。
IF/THENルール(または単なるルール)の記述方法には、一般的なルールとしてと動詞ルールとしての2つがあります。
一般的なルールでは、擬似コード言語を使用して、ルール・ロジックを表します
動詞ルールでは、自然言語文を使用してルール・ロジックを表します
デシジョン表は、スプレッドシートのような形式で表される複数の関連したルールです。
ルールおよびデシジョン表は、ファクト・タイプおよびプロパティに関して記述します。「デシジョン表」を参照してください。ファクト・タイプは、Javaクラス、XMLスキーマ、Oracle ADFビジネス・コンポーネント・ビュー・オブジェクトからインポートされることもあれば、ルール・デザイナで作成されることもあります。ファクト・プロパティは、名前、値、データ型およびオプションの値セットを持っています。値セットは、データ型の値空間を、デシジョン表、選択リストおよびデザインタイムの検証に使用できる値または範囲に分割します(「ファクトおよび値セットとは」を参照)。
動詞ルールのテストおよびアクションは、導出されたビジネス・フレーズおよびユーザー定義のビジネス・フレーズを使用して作成できます。導出されるビジネス・フレーズは、ファクト、グローバルおよびディクショナリのその他の情報を使用して自動的に作成されますが、ユーザー定義のフレーズは、明示的に作成して導出されたフレーズを補うことができます。さらに、ユーザー定義のフレーズは、事前作成することも、動詞ルールの構成時に必要に応じて作成することもできます。
ルールおよびデシジョン表を、ルールセットと呼ばれるOracle Business Rulesオブジェクトにグループ化します(「ルールセットとは」を参照)。
1つ以上のルールセット、それらのファクトおよび値セットを、ディクショナリと呼ばれるOracle Business Rulesオブジェクトにグループ化します(「ディクショナリとは」を参照)。
詳細は、「Oracle Business Rulesのランタイム要素とデザインタイム要素」を参照してください。
ルールは、条件を評価するためと、条件を満たした(trueに評価される)ときのアクションを指定するために使用されます。
ルールは、次の2つの異なるパラダイムを使用してモデル化できます。
一般的なルール: 擬似コード言語を使用して、ルール・ロジックを表します。
動詞ルール: 自然言語文を使用して、話し言葉に似たドメイン固有文でルール・ロジックを表現します。「動詞ルールと一般的なルールの違い」を参照してください。
ルールはif-then構造に従い、次の部分で構成されます。
IF部分: 条件またはパターン一致(「ルール条件とは」を参照)
THEN部分: アクションのリスト(「ルール・アクションとは」を参照)
ルールのIF部分は、ファクト・タイプを参照する条件式で構成されています。
たとえば、一般的なルールの場合は次のようになります。
Rental_application.driver age < 21の場合
一般的なルールの条件式では、より小さい比較を使用してビジネス条件(Rental_application.driver age)が数値21と比較されます。
動詞ルールの場合は次のようになります。
IF rental car driver is an underage driver
動詞ルール条件は、1つ以上の論理テストを指定できるビジネス・フレーズです。(「ビジネス・フレーズとは」を参照)。
ルール条件は、ファクトの組合せで条件式がtrueになるたびにルールをアクティブにします。ルール条件はRules Engine内の使用可能なファクト全体に対する問合せのようなものであり、問合せから戻される行のそれぞれに対してルールがアクティブになります。
詳細は、次を参照してください。
Oracle Business Process Managementのルール・ランゲージ・リファレンスのルール条件に関する項
ルールのTHEN部分には、ルールの起動時に実行されるアクションが含まれています。ルールはアクティブ化され、優先度など競合解決メカニズムを使用して他のルールのアクティブ化の中から選択された後、起動されます。
ルールはいくつかの種類のアクションを実行することがあります。ファクトを追加、変更または削除するアクションがあります。また、あるアクションではJavaメソッドを実行したり、関数を実行してファクトのステータスを変更したり、ファクトを作成できます。
ルールは、同時ではなく順番に起動します。ルール・アクションによってルールのアクティブ化設定が変更され、どのルールが次に起動されるのかが変更される場合があることに注意してください。
詳細は、次を参照してください。
Oracle Business Process Managementのルール・ランゲージ・リファレンスのルールの起動の順序付けに関する項
動詞ルールでは、擬似自然言語文を使用してルール・ロジックを表すことができます。それらによって、話し言葉に似たドメイン固有文を使用してルールを記述できます。
動詞ルールは、ビジネス・フレーズと緊密に連携し、それらによって自然言語のテストおよびアクションを作成するためのボキャブラリが提供されます。「ビジネス・フレーズとは」を参照してください。
たとえば、次の例に示す一般的なルール・テストの場合:
IF all of the following are true policy is a policy policyScore.type == Score Type.Policy policyScore.id == policy.id car is a Car carScore is a Score Tracker carScore.type == Score Type.Car carScore.id == car.id customer is a Customer customerScore is a Score Tracker customerScore.type == Score Type.Customer customerScore.id == customer.id score of a car == carScore.score score of customer == customerScore.score score of policy = policyScore.score THEN assign new BigDecimal var = newBigDecimal((1+((2-((customerScore + carScore + policyScore)/150))/100))*(Lower Threshold)) assign new double premium = var.setScale(1,BigDecimal.ROUND_HALF_UP).doubleValue()
この同じテストの動詞ルール表現は、次のようにすることができます。
IF ready to calculate premium THEN calculate premium base on score of customer, score of policy and score of car
ready to calculate premium、scoreなどのビジネス・フレーズは、条件に対するロジックを詳しく示しています。
動詞ルールはトップダウンまたはボトムアップなど自分のスタイルに合せた方法で記述できます。
たとえば、まだ定義していないビジネス・フレーズを使用して動詞ルールを記述できます。テストおよびアクションのロジックを表す動詞ルールを作成したら、ビジネス・フレーズの特性を定義できます。
導出されたビジネス・フレーズを提供したシステムを使用して動詞ルールを作成することもできます。既存の条件、ファクト、グローバルおよび他のディクショナリ要素に基づいて自動的に作成されるビジネス・フレーズもあります。
また、必要なビジネス・フレーズを最初にすべて定義して、動詞ルールのテストおよびアクションでそれらを使用することで、ボトム・アップ形式を使用して動詞ルールを記述できます。
詳細は、「ルールセットとルールの使用」を参照してください。
デシジョン表は、多数のプロパティ値の組合せ分析に多数のルールが必要な場合の、よりコンパクトで直感的な代替ビジネス・ルール形式です。デシジョン表を使用すると、すべての組合せをカバーし、また競合する組合せが2つとしてない、一連のルールを作成できます。
デシジョン表はif-thenルールと機能的に同等ですが、特定の状況ではデシジョン表が理想的であることがわかります。
複雑度
デシジョン表は、複雑なルールを簡素化します。複数のルールがあり、それらにそれぞれ複数の条件およびアクションがある場合、デシジョン表によってそれらの使用が大幅に簡単になります。
競合の解決
デシジョン表には、競合している条件があるかどうかが示されます。
ギャップ分析
デシジョン表を分析して、一部の条件が収容されていないかどうか判別できます。
詳細は、「デシジョン表の使用」を参照してください。
Oracle Business Rulesでは、ビジネス・ルールをデシジョン・コンポーネントとして、またはJavaアプリケーションのライブラリとして使用するためのサポート機能が用意されています。デシジョン・コンポーネントは、ルールおよびルールセットを、複数のビジネス・プロセスから起動できる再利用可能なサービスとして公開するメカニズムです。
Oracle SOA SuiteまたはOracle BPM Suiteでルールを作成して使用したり、ルールを作成してアプリケーションに統合できるように、Oracle Business Rulesには次のランタイム要素およびデザインタイム要素が用意されています。
Oracle SOA Suiteには、Oracle Business Rulesをサポートするデシジョン・コンポーネントのサポート機能が用意されています。デシジョン・コンポーネントは、ルールおよびルールセットを、複数のビジネス・プロセスから起動できる再利用可能なサービスとして公開するメカニズムです。
デシジョン・コンポーネントは、コンポジット内で使用でき、かつBPELコンポーネントに接続できるSCAコンポーネントです。それ以外に、デシジョン・コンポーネントはヒューマン・ワークフローでのメディエータおよび拡張ルーティング・ルールの動的ルーティング機能に使用されます。
Oracle Business Rules Rules Engine (Rules Engine)は、ルールをファクトに効率的に適用してルールを定義および処理するSOAビジネス・ルール・サービス・エンジンを使用したSOAコンポジット・アプリケーションのサービス・エンジン・コンポーネントで使用可能です。
詳細は、「Oracle Business Rules Engineのアーキテクチャ」を参照してください。
The Rules Engineは、Java EEアプリケーション(非SOA)で使用するライブラリとして使用可能です。Rules Engineにより、ルールがファクトに効率的に適用され、ルールが処理されます。Rules Engineは、Oracle Business Rules RL Language (RL Language)と呼ばれるJavaに似た本番ルール言語を定義し、言語処理エンジン(推論エンジン)を提供し、デバッグのサポート・ツールを提供します。
ルール・デザイナを使用することで、ビジネス・ルールをアプリケーション・コードから分離でき、グラフィカル・ツールを使用してビジネス・ポリシーをすばやく変更できるようになります。Rules Engineでは、ビジネス・ルールが評価されてデシジョンまたはファクトが返され、それらがビジネス・プロセスで使用されます。
ルール対応Javaアプリケーションでは、ルール・プログラムをロードして実行できます。ルール対応アプリケーションは、ファクト(JavaオブジェクトまたはXML文書の形式でアサートされたもの)およびルールをRules Engineに渡します。ルール対応Javaアプリケーションで実行されるRules Engineは、Reteアルゴリズムを使用して、ファクトに適したルールを効率的に起動します。
詳細は、「Oracle Business Rules Engineのアーキテクチャ」および「Oracle Business Rules SDK」を参照してください。
Oracle Business Rulesは、Oracle Business Rules RL Language (RL Language)と呼ばれるJavaに似た高レベルな言語をサポートしています。RL Languageは、Oracle Business Rulesプログラムに有効な構文を定義します。RL Languageには、Javaセマンティクスの能力をサポートするルールを定義するための、Javaに似た直感的な構文が含まれており、使いやすい構文をアプリケーション開発者に提供します。RL Languageは、動的に生成したり、ファイルに格納できるテキスト文のコレクションで構成されています。
RL Languageを使用すると、アプリケーション・プログラムではJavaオブジェクトをファクトとしてアサートでき、ルールではオブジェクト・プロパティを参照してメソッドを起動できます。同様に、アプリケーション・プログラムではXML文書またはXML文書の一部をファクトとして使用できます。
プログラマは、すべての機能を備えたルール・プログラミング言語として、RL Languageを直接およびOracle Business Rules SDK (Rules SDK)の一部として使用できます。
ビジネス・アナリストは、ルール・デザイナを使用してルールを操作できます。この場合、ビジネス・アナリストは、RL Languageプログラムを直接表示または記述する必要はありません。詳細は、「ルール・デザイナ」を参照してください。
RL Languageの詳細は、Oracle Business Process Managementのルール・ランゲージ・リファレンスを参照してください。
Oracle Business Rules SDK (Rules SDK)は、ビジネス・ルール管理機能を提供するJavaライブラリであり、開発者はこれを使用して、ディクショナリにアクセスするルール対応プログラムを作成したり、ルールの追加や既存のルールの変更を行うカスタマイズされたルール・プログラムを作成できます。ルール・デザイナはRules SDKを使用して、明確に定義されたインタフェースにより、ルールおよびデータ・モデルの作成、変更およびアクセスを行います。カスタマ・アプリケーションでは、Rules SDKを使用して、ルールおよびデータ・モデルのコレクションのアクセス、表示、作成、変更を行うことができます。
Rules SDK APIをルール対応アプリケーションで使用して、ルールにアクセスしたり、ルールを作成および変更できます。ルールおよび関連するデータ・モデルは最初、カスタム・アプリケーションで作成されるか、またはルール・デザイナを使用して作成されます。
このマニュアルでは、Oracle Business Rules SDKデシジョン・ポイントAPIについて説明します。デシジョン・ポイントを使用すると、ディクショナリにアクセスし、ディクショナリ内のルールを実行できます。Oracle Business Rules SDK APIの詳細は、『Oracle Fusion Middleware Java API Reference for Oracle Business Rules』を参照してください。
詳細は、「スタンドアロン(非SOA/BPM)シナリオでのルールの使用」を参照してください。
Oracle JDeveloperのOracle Business Rules Designer(ルール・デザイナ)拡張機能は、ルールを作成および編集できるエディタです。
ルール・デザイナは、ルールの作成および一般的なルールおよびデシジョン表の編集のためのpoint-and-clickインタフェースを提供します。ビジネス・ルールおよびデータ・モデルを直接操作できるため、ルール・デザイナを使用するためにRL Languageを理解する必要はありません。
ルール・デザイナは、動詞ルールに対して、ガイド付き作成(自動推奨およびフィルタリング)およびキーボードベースのインタフェースも提供します。ガイド付き作成およびキーボードベースのインタフェースの詳細は、「SOAコンポーザでの動詞ルールの追加方法」を参照してください。
ルール・デザイナは、アプリケーション開発者やビジネス・アナリストなど、様々なタイプのユーザーをサポートしています。アプリケーション開発者は、ルール・デザイナを使用して、データ・モデルおよびルールの初期セットを定義します。ビジネス・アナリストは、ルール・デザイナを使用して、ルールの初期セットを操作したり、ビジネス・ニーズに従ってルールの初期セットを変更およびカスタマイズします。ルール・デザイナを使用すると、ビジネス・アナリストは、ほとんどプログラマの援助なしに、ルールを作成およびカスタマイズできます。
また、トップダウン・モデリングでは、ビジネス・アナリストは、後で開発者が実装できるルールを記述的に定義できます。これらの様々なモデリング方法では、開発者とアナリストの間の協力が必要です。
多くの場合、ルール・モデリングは反復的に実行され、より技術的でなく、自然言語に近い文を使用したルールの定義に使用できるドメイン固有言語の作成に彼らの両方が貢献します。
動詞ルールの詳細は、「ルールセットとルールの使用」を参照してください。
SOAコンポジット・アプリケーションにディクショナリがデプロイされると、Oracle Business Rulesによって、ディクショナリを表示したり、ディクショナリを編集して変更を保存したりできるようになります。SOAコンポーザ・アプリケーション (SOAコンポーザ)を使用して、SOAコンポジット・アプリケーションの一部としてデプロイされているディクショナリを操作できます。
詳細は、「実行時のOracle Business RulesとのOracle SOAコンポーザの使用方法」を参照してください。
Business Process Composerルール・エディタを使用すると、ルール・ディクショナリを表示および編集できます。ルール・ディクショナリは、プロセス・エディタおよびデータ・アソシエーション・エディタに類似のタブを使用したウィンドウに表示されます。
BP Composerでのルールの使用方法の詳細は、『Oracle Fusion Middleware Oracle Business Process Composerによるビジネス・プロセスの開発』のOracle Business Process Composerルール・エディタの使用方法に関する項を参照してください。
Reteアルゴリズムを使用したルールベース・システムは、Oracle Business Rulesの基盤です。
ルールベース・システムは、次の要素で構成されています。
ルールベース: 適切なビジネス・ポリシーや、その他のIF/THENルール、動詞ルールおよびデシジョン表にエンコードされたナレッジ。
作業メモリー: システムに追加された情報。Oracle Business Rulesでは、アサート・コールを使用してシステムに一連のファクトを追加します。
推論エンジン: ルールを処理するRules Engine。一連のファクトを対象とした特定の実行において、ファクトに適合するルールを、パターン一致を実行して判断します。
Oracle Business Rulesでは、ルールベース・システムはデータドリブンの前向き連鎖システムです。ファクトは起動可能なルールを決定します。したがって、ルールの起動されるとき、そのルールは一連のファクトと一致したものです。ルールにはファクトを追加でき、これらのファクトもルールに対して再実行されます。このプロセスは、結論に達するか、このサイクルが停止またはリセットされるまで繰り返し実行されます。このように、前向き連鎖のルールベース・システムでは、ファクトによってルールが起動し、ルールの起動によって新たなファクトが作成され、そのファクトによってさらに別のルールが起動します。このようなプロセスを、推論サイクルと呼びます。
非Reteアルゴリズムも使用可能です。両方の詳細は、「Reteアルゴリズム」および「非Reteアルゴリズム」を参照してください。
Oracle Business Rulesでは、宣言ルールを使用することができます。ここでは、コーディングではなくファクトに基づいて宣言を作成するルールを作成します。宣言ルールの例は次のとおりです。
IF a Customer is a Premium customer, offer them 10% discount IF a Customer is a Gold customer, offer them 5% discount
宣言ルール
文は制御フローなしで宣言されます。
制御フローはRules Engineによって決定されます。
ルールはプロシージャ・コードよりもメンテナンスが容易です。
ルールはビジネス・ユーザーの作業方法に適切に関連付けられています。
ルールによってファクトが追加され、これらのファクトがルールに対して実行される場合、このようなプロセスを推論サイクルと呼びます。推論サイクルでは、初期ファクトによってルールが起動し、ルールの起動によって新たなファクトが作成され、そのファクトによってさらに別のルールが起動する場合があります。たとえば、初期ファクトを使用してRules Engineで他のファクトの実行および追加が行われ、他のファクトによって、推論サイクルを作成するこのファクトの条件がテストされます。
IF a Customer is a Premium customer, offer them 10% discount IF a Customer is a Gold customer, offer them 5% discount IF a Customer spends > 1000, make them Premium customer
Oracle Business Rulesで提供される推論サイクルを使用すると、強力でモジュール形式の宣言アサーションが可能になります。
Reteアルゴリズムは、人工知能の研究者によって1970年代後期に最初に開発され、現在では、様々なベンダーが提供するRules Engineの核となっています。Oracle Business Rulesでは、ルールとファクトのパターン一致プロセスを最適化するため、このReteアルゴリズムを使用しています。Reteアルゴリズムは、部分一致の結果を、作業メモリーにあるノードの単一ネットワークに格納します。
Reteアルゴリズムを使用すると、Rules Engineではファクトの削除、追加または変更時に不要な再確認を回避できます。ファクトとルールを処理するために、Reteアルゴリズムは、各ファクト定義に入力ノードを、各ルールに出力ノードを作成し、使用します。
ファクト参照は入力ノードから出力ノードへと流れます。入力ノードと出力ノードの間にテスト・ノードと結合ノードがあります。テストが発生するのは、ルール条件にブール式が含まれている場合です。結合が発生するのは、ルール条件が2つのファクトの論理積(AND)を実行する場合です。ルールは、その出力ノードにファクト参照が含まれている場合にアクティブになります。ファクト参照はネットワーク全体でキャッシュされ、アクティブになったルールの再計算の速度が上がります。ファクトが追加、削除または変更された場合、Reteネットワークでは、キャッシュとルールのアクティブ化が増分のみで更新されます。
Reteアルゴリズムの利点は、次のとおりです。
ルール順序からの独立: 他のルールに影響を与えずに、ルールを追加および削除できます。
複数ルール間での最適化: 共通の条件を使用する各ルールは、Reteネットワーク内でノードを共有します。
高いパフォーマンスの推論サイクル: 通常、各ルールの起動によって変更されるのは少数のファクトのみで、Reteネットワークの更新コストは、ファクトまたはルールの総数ではなく、変更されたファクトの数に比例します。
Non-Reteアルゴリズム(NRE)は、Reteアルゴリズムの代替で、Reteアルゴリズムと比較して消費メモリーが少なくなります。ビジネス・ルールのユース・ケースの多くでは、パフォーマンスも向上します。NREアルゴリズムの中核は、新しいルール条件評価アプローチにあります。新しいアルゴリズムのキー・ポイントは次のとおりです。
より簡素化された内部ルール表現。
ルール・テスト、ルール・アクション、およびユーザー定義の関数のために生成されたバイト・コード。
より効率的な変更操作。
ルール条件は、それを含んでいるルールセットがスタックの先頭になるまでは評価されない。最初の評価の後、必要に応じてファクト操作で再評価が行われる。
ルール実行中にルールセット・スタックにルールセットが1回のみ存在する場合は、不要な再評価を回避できる。
ルール実行セマンティクスが保持される。
2つのアルゴリズムの間の2つの主な相違は次のとおりです。
ルール条件の評価:
Reteアルゴリズムでは、ルール条件はファクト操作(アサート、変更、リトラクト)が行われるときに評価されます。
非Reteアルゴリズムでは、ルール条件は、そのルールセットがスタックの先頭になったときに初めて評価され、その後のファクト操作で評価されます。
ルールの起動順序。ルールの起動順序が定義されていない場合があります。たとえば、1つのファクトによって複数のルールが同時にアクティブ化され、それらのプロパティが同一である場合です。このような場合、ルールのアクティブ化の起動順序は異なることがあります。
注意:
ルールの既存のセットが、Reteアルゴリズムでのそのルールの起動順序が定義されていない可能性があっても、その順序に明示的に依存していることがあります。順序は、作成時に潜在バグを公開できる非Reteアルゴリズムでは異なる場合があります。
ルール・デザイナでの「ディクショナリ設定」パネルの「プリファレンス」タブでアルゴリズムを選択できます。アルゴリズムの選択は、SOAおよびBPMコンポジット・アプリケーションの場合は自動的に処理されます。JEEアプリケーションまたは他の非SOA/BPMアプリケーションの場合、RuleSessionまたはRuleSessionPoolの作成時にアルゴリズムの選択を指定する必要があります。
RuleSessionsの詳細は、『Oracle Fusion Middleware Oracle Business Rulesランゲージ・リファレンス・ガイド』のRuleSessionの使用方法に関する項を参照してください。
ルールの実行中に複数のルールセットが実行されることがよくあります。また、各ルールセットがルールセット・スタックに1回追加され、そのルールセットのルールの起動を完了すると、そのルールの実行中はそれがそのスタックに再度追加されないこともよくあります。非Reteアルゴリズムでは、このような場合に、そのルールセットがスタックに1回のみ出現することを指定するとパフォーマンスを向上できます。非Reteアルゴリズムを選択した場合、デシジョン関数定義で「1回のスタックのルールセット」チェック・ボックスを選択して、この機能を有効化します。
Reteまたは非Reteアルゴリズムをどのような場合に使用するのかの詳細は、『Oracle Business Process Managementルール言語リファレンス』のルール・エンジン・アルゴリズムに関する項を参照してください。
Oracle Business Rulesでは、作業メモリーを使用してファクトを格納します。ファクトは、作業メモリーの外部には存在しません。Oracle Business Rulesの作業メモリーはRuleSessionに格納されます。
ルール・セッションは、ルール、ファクトおよびアジェンダで構成されます。アサートまたは取消しによって、作業メモリーからファクト・インスタンスが追加または削除されます。
作業メモリー内のファクトに変更があると、次のようになります。
ルールの条件が評価されます。
一致するルールがアジェンダに追加されます(アクティブ化)。
一致しなくなったルールはアジェンダから削除されます。
アクティブ化されたルールについて、Rules Engineによってアクションが実行(起動)されます。
図1-3 に、Oracle Business Rulesランタイムのこの部分を示します。
ルール・アクションでは、ファクトをアサートまたは変更してアクティブ化をアジェンダに追加するか、ファクトを取り消してアクティブ化をアジェンダから削除できます。ルールのアクションが原因で再度起動されると、ループが発生する可能性があります。ルールは順番に起動しますが、事前に定義された順序ではありません。ルール・セッションには、ルールセットのスタックが含まれています。アクティブ化されたルールは、次のように起動されます。
スタック最上部にあるルールセット内のルールが起動されます。
ルールセット内では、ユーザー定義の優先度に従って起動が順序付けされます。
同じ優先度の場合、デフォルトでは、最も最近にアクティブ化されたルールが最初に起動されます。詳細は、『Oracle Business Process Managementルール言語リファレンス』のsetStrategy関数に関する項を参照してください。
Reteアルゴリズムの場合、起動されるのはスタック上にあるルールセット内のルールのみですが、ルール・セッション内のルールがすべて照合され、一致した場合はアクティブ化されます。非Reteアルゴリズムの場合、これは、スタックの先頭にあるルールセットのルールにあてはまります。これは、「1回のスタックのルールセット」が選択されていない場合、ルールセット・スタックから取得されたルールセットのルールにもあてはまります。