ヘッダーをスキップ

Oracle Business Rules ユーザーズ・ガイド
10g(10.1.3.1.0)

B31866-02
目次
目次
索引
索引

戻る 次へ

1 Oracle Business Rulesの概要

このマニュアルには、Oracle Business Rulesの使用方法に関する情報が記載されています。Oracle Business RulesはOracle Application Serverの1つのコンポーネントで、アプリケーションを規制や競争上の要求に対し迅速に対応できるようにします。このような適応性が増すのは、Oracle Business Rulesを使用することで、ビジネス・アナリストがビジネス・ルールをアプリケーション・コードから切り離して作成および変更できるためです。Oracle Business Rulesを使用すると、ビジネス・アナリストは、ビジネス・プロセスを停止することなくビジネス・ルールを変更できます。また、ビジネス・ルールを外部的なものにすることによって、ビジネス・アナリストはプログラマの介入なしにビジネス・ルールを直接管理できます。

このマニュアルでは、Oracle Business Rules Rule Author(Rule Author)の使用方法、Oracle Business Rules SDK(Rules SDK)の説明、およびルール対応Javaプログラムの作成方法を説明します。

この章の内容は次のとおりです。

1.1 Oracle Business Rulesの概要

この項では、ビジネス・ルールの概念について説明します。内容は次のとおりです。

1.1.1 ビジネス・ルールとは

ビジネス・ルールとは、ビジネス・ポリシーを記述した文のことです。たとえば、レンタカー会社であれば、次のようなビジネス・ルールを使用します。

If the age of a driver is younger than 21, then decline to rent.
(運転者の年齢が21歳未満の場合、貸し出しを拒否する。)

航空会社であれば、次のようなビジネス・ルールを使用します。

If a frequent flyer account has total miles for the year that are greater than 100,000, then status is Gold.
(頻度の高い飛行機利用者の年間飛行距離合計が100,000マイルを超える場合、ゴールド・ステータスとする。)

金融機関であれば、次のようなビジネス・ルールを使用します。

If annual income is less than $10,000, then deny loan.
(年間収入が10,000ドル未満の場合、貸付を拒否する。)

これらの例は、それぞれ個別のビジネス・ルールを示しています。実際には、Oracle Business Rulesを使用して、多数のビジネス・ルールを組み合せることができます。

たとえば、レンタカー会社の例では、運転者の年齢に関するルールに「UnderAgeルール」という名前を指定できます。UnderAgeルールなどのルールは、従来、アプリケーション・コードに組み込まれ、Javaアプリケーションでは、次のように表示されていました。

public boolean checkUnderAgeRule (Driver driver) { 
   boolean declineRent = false;  
   int age = driver.getAge();
   if(  age < 21 ) { 
      declineRent = true; 
   }
   return declineRent; 
}

技術的な知識のないユーザーが、このようなコードを読んで理解し、変更することは困難です。たとえば、レンタカー会社がポリシーを「18歳未満」に変更して、18歳未満のすべての運転者をUnderAgeルールの対象にするとします。多くの本番環境では、開発者がアプリケーションを変更し、変更したアプリケーションを再コンパイルして再デプロイする必要があります。Oracle Business Rulesを使用して作成したビジネス・ルール・アプリケーションでは、ビジネス・ルールが容易に変更できるようにサポートされるため、このプロセスが簡素化されます。

Oracle Business Rulesを使用すると、ビジネス・アナリストは、ほとんどプログラマの援助なしに、ビジネス・ルールで表現されたビジネス・ポリシーを変更できます。Oracle Business Rulesを使用するルール対応アプリケーションと呼ばれるアプリケーションでは、新しい政府規制や、社内プロセスの改善、顧客とサプライヤの関係の変化にアプリケーションが対応できるよう、継続的な変更がサポートされます。

関連項目:

「Javaアプリケーションをルール対応にする手順」 

1.1.2 データ・モデルとは

Oracle Business Rulesでは、ファクトとは、Rules Engine内でアサートされるデータ・オブジェクトです。UnderAgeルールなどのルールは、ファクトを制約し、サポートします。Oracle Business Rulesでは、データ・モデルとは、ビジネス・ルールの作成に使用できるファクトまたはビジネス・オブジェクトのタイプを指定するものです。たとえば、レンタカー会社で運転者の年齢と照合させるルールを作成する場合は、運転者に関する情報が、ルールに使用されるファクトとなります。Rule Authorを使用すると、データ・モデルを定義し、そのデータ・モデル内でオブジェクトを使用してルールを作成できます。

1.1.3 ルールベース・システムとは

この項の内容は次のとおりです。

1.1.3.1 Reteアルゴリズムを使用したルールベース・システム

Reteアルゴリズムは、人工知能の研究者によって1970年代後期に最初に開発され、現在では、様々なベンダーが提供するRules Engineの核となっています。Oracle Business Rulesでは、ルールとファクトのパターン一致プロセスを最適化するために、このReteアルゴリズムを使用しています。Reteアルゴリズムは、部分一致の結果を、現行の作業メモリーにあるノードの単一ネットワークに格納します。

Reteアルゴリズムを使用することで、Rules Engineでは、ファクトの削除、追加または変更時に不要な再確認を回避できます。ファクトとルールを処理するために、Reteアルゴリズムは、各ファクト定義に入力ノードを、各ルールに出力ノードを作成し、使用します。ファクト参照は、入力ノードから出力ノードまでのフローです1

Reteアルゴリズムの利点は、次のとおりです。

1.1.3.2 Oracle Business Rulesのルールベース・システム

Reteアルゴリズムを使用したルールベース・システムは、Oracle Business Rulesの基盤です。ルールベース・システムは、次の要素で構成されています。

Oracle Business Rulesでは、ルールベース・システムはデータドリブンの順連鎖化システムです。起動するルールはファクトによって決定されます。一連のファクトに一致するルールが起動すると、そのルールによって新しいファクトが追加される場合があります。これらの新しいファクトは再びルールに対して実行されます。このプロセスは、結論に達するか、このサイクルが停止またはリセットされるまで繰り返し実行されます。このように、順連鎖化のルールベース・システムでは、ファクトによってルールが起動し、ルールの起動によって新たなファクトが作成され、そのファクトによってさらに別のルールが起動します。このようなプロセスを、推論サイクルと呼びます。

1.2 Oracle Business Rulesのコンポーネント

図1-1に、Oracle Business Rulesの各コンポーネントを示します。

内容は次のとおりです。

1.2.1 Oracle Business Rules Rule Authorの概要

Oracle Business Rules Rule Author(Rule Author)を使用すると、Webブラウザを使用してどこからでもルールを操作できます。これは、新規ルールの作成と既存ルールの編集用のpoint-and-clickインタフェースを提供します。Rule Authorを使用すると、ビジネス・ルールとデータ・モデルを直接操作できます。Rule Authorの操作に、Oracle Business Rules RL Language(RL Language)の理解は不要です。Rule Authorには、ビジネス・ルールを簡単に作成、表示および変更するための方法が用意されています。

Rule Authorは、アプリケーション開発者やビジネス・アナリストなど、様々なタイプのユーザーをサポートしています。アプリケーション開発者は、Rule Authorを使用して、データ・モデルとルールの初期セットを定義します。ビジネス・アナリストは、Rule Authorを使用して、ルールの初期セットを操作したり、ビジネス・ニーズに従ってルールの初期セットを変更およびカスタマイズします。Rule Authorを使用すると、ビジネス・アナリストは、ほとんどプログラマの援助なしに、ルールを作成およびカスタマイズできます。

Rule Authorは、ルール・プログラムをディクショナリに格納します。このディクショナリは、Rule Authorのディクショナリ・ストレージ・プラグインを使用してリポジトリに保存されます。ディクショナリは必要な数だけ作成でき、各ディクショナリには複数のバージョンを指定できます。ルール対応プログラムは、Oracle Business Rules SDKを使用してディクショナリにアクセスします。

出荷時のRule Authorでは、WebDAV(Web Distributed Authoring and Versioning)リポジトリとファイル・リポジトリがサポートされています。


注意1:

複数のユーザーが同じディクショナリを編集することは安全ではありません。 



注意2:

ファイル・リポジトリの場合、所定の時間にリポジトリを編集できるのは、そのリポジトリに格納されているディクショナリ数に関係なく常に1人のユーザーのみです。WebDAVリポジトリの場合は、1人のユーザーが複数のディクショナリを同時に編集できます。 


1.2.2 Oracle Business Rules Rules SDKの概要

Oracle Business Rules SDK(Rules SDK)は、ビジネス・ルールの管理機能を提供するJavaライブラリで、開発者は、カスタマイズしたルール・プログラムを記述するために使用できます。 Rule Authorでは、このRules SDKを使用し、適切に定義されたインタフェースを介して、ルールとデータ・モデルを作成および変更し、ルールとデータ・モデルにアクセスします。カスタム・アプリケーションでは、Rules SDKを使用して、ルールとデータ・モデルのコレクションを表示、作成および変更できます。

Rules SDK APIをルール対応アプリケーションで使用して、ルールへのアクセスや、ルールの作成と変更ができます。ルールおよび関連するデータ・モデルは最初、カスタム・アプリケーションで作成されるか、またはRule Authorを使用して作成されます(Rule Authorは、Rules SDK ディクショナリ・ストレージ・プラグインを使用してルールを格納します)。

Rules SDKおよびRules SDKのディクショナリ・ストレージ・プラグイン部分を使用して、カスタム・リポジトリをサポートすることもできます。

1.2.3 Oracle Business Rules RL Languageの概要

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を使用できます。ビジネス・アナリストは、Rule Authorを使用してルールを操作できます。この場合、ビジネス・アナリストは、RL Languageプログラムを直接表示または記述する必要はありません。

関連項目:

RL Languageの詳細は、『Oracle Business Rulesランゲージ・リファレンス』を参照してください。 

1.2.4 Oracle Business Rules Rules Engineの概要

Oracle Business Rules Rules Engine(Rules Engine)は、ルールをファクトに効率的に適用し、ルールを定義および処理するJavaライブラリです。Rules Engineは、宣言ルール言語を定義し、言語処理エンジン(推論エンジン)を提供し、デバッグのサポート・ツールを提供します。

Rules Engineには、次の機能があります。

ルール対応Javaアプリケーションでは、ルール・プログラムをロードして実行できます。ルール対応アプリケーションは、ファクト(JavaオブジェクトまたはXML文書の形式でアサートされたもの)とルールをRules Engineに渡します。ルール対応Javaアプリケーションで実行されるRules Engineは、Reteアルゴリズムを使用して、ファクトに適したルールを効率的に起動します。

Rules Engineでは、RL Languageプログラムの開発、テストおよびデバッグに必要な対話型コマンドライン・インタフェースがサポートされています。

1.3 Oracle Business Rules Rule Authorの用語と概念

この項では、Rule Authorの用語と概念について説明します。内容は次のとおりです。

1.3.1 ルールの使用

ルールは、If(条件)とThen(アクションのリスト)で構成されています。ルールは簡単なif-then構造に従っています。この項では、ルールの各構成要素を説明します。

1.3.1.1 ルール条件

ルールのIf部分は、ファクトを参照する条件式とルール条件で構成されています。次に例を示します。

If the age of a driver is younger than 21.

条件式はファクト(driver)を参照し、そのファクトのデータ・メンバー(age)が21未満であることをテストします。

ルール条件は、ファクトの組合せで条件式がtrueになると、該当するルールをアクティブ化します。いくつかの点で、ルール条件は、Rules Engine内の使用可能なファクトへの問合せに類似しています。問合せで戻された各行に対して、ルールがアクティブ化されます。

1.3.1.2 ルール・アクション

ルールのThen部分には、すべてのルール条件が満たされた場合に実行するアクションが記述されています。アクションが実行または起動されるのは、If部分のすべての条件が満たされた場合です。ルールは、いくつかの種類のアクションを実行します。あるアクションでは新しいファクトを追加したり、ファクトを削除できます。また、あるアクションではJavaメソッドを実行したり、RL Language関数を実行して、ファクトのステータスを変更したり、新しいファクトを作成できます。

ルールは、同時ではなく順番に起動します。ルール・アクションによってルールのアクティブ化設定が変更され、次に起動するルールが変更される場合があることに注意してください。

関連項目:

「ルールセットの使用」 

1.3.2 ルールセットの使用

ルールセットは一連のルールをグループ化します。ルールセットは、すべてが一括して評価されるルールのコレクションです。

関連項目:

「ルールの使用」 

1.3.3 リポジトリとディクショナリの使用

Oracle Business Rulesで使用するリポジトリには、ディクショナリが格納されます。通常、ディクショナリはルール・アプリケーションに対応し、ルール対応アプリケーション用のルールと定義が格納されます。ディクショナリは、ルールとデータ・モデルが格納されている一連のXMLファイルです。ディクショナリをリポジトリに格納するには、提供されているディクショナリ・ストレージ・プラグインまたはカスタムのディクショナリ・ストレージ・プラグインを使用します。ディクショナリ・ストレージ・プラグインAPIは、Rules SDKの一部です。ディクショナリはバージョン化できます。ディクショナリとそのバージョンは、リポジトリに対して、作成、削除、エクスポートおよびインポートができます。

出荷時のRule Authorでは、WebDAV(Web Distributed Authoring and Versioning)リポジトリとファイル・リポジトリがサポートされています。

1.3.4 ファクトの使用

Oracle Business Rulesでは、ルールに対して実行できるファクトは、アサートされたデータ・オブジェクトです。各オブジェクト・インスタンスは単一のファクトに対応しています。オブジェクトが(変更済かどうかに関係なく)再アサートされると、Rules Engineが更新され、そのオブジェクトの新しい状態が反映されます。オブジェクトの再アサートによる新しいファクトの作成はありません。特定のファクト・タイプに複数のファクトを指定するには、オブジェクト・インスタンスを個別にアサートする必要があります。

Rule Authorでは、データ・モデルの一部であるファクト定義を使用してOracle Business Rulesに、ビジネス・オブジェクトとそのメソッドを認識させます。

この項では、次の3種類のOracle Business Rulesファクト定義を説明します。

ルール対応アプリケーションのビジネス・オブジェクトを調査するルールを作成したり、結果をアプリケーションに返す場合は、通常、Javaファクト・タイプとXMLファクト・タイプを使用します。RL Languageファクト・タイプ定義を使用してRules Engineで他のルールを起動できる中間ファクトを作成します。

1.3.4.1 Javaファクト・タイプ定義

Javaファクト・タイプを使用すると、Javaクラスの選択したプロパティとメソッドをRules Engineに対して宣言できるため、ルールではそのJavaクラスのインスタンスへのアクセス、作成、変更および削除が可能となります。Javaファクト・タイプを宣言すると、Rules EngineはJavaクラスに定義されているpublic属性、publicメソッドおよびBeanプロパティをアクセスして使用できます(一部のアプリケーションではBeanプロパティが適切です。これは、JavaオブジェクトがPropertyChangeListenerをサポートしていることがRules Engineで検出される場合があるためです。この場合は、オブジェクトの変更時に通知するメカニズムが利用されます。)

1.3.4.2 XMLファクト・タイプ定義

XMLファクト・タイプを使用すると、XML要素の選択した属性とサブ要素またはcomplexTypeをRules Engineに対して宣言できるため、ルールではそのインスタンスへのアクセス、作成、変更および削除が可能となります。

関連項目:

「Rule AuthorでのXML文書およびスキーマの使用の概要」 

1.3.4.3 Oracle Business Rules RL Languageファクト・タイプ定義

RL Languageファクト・タイプは、リレーショナル・データベースの行またはメソッドがないJavaBeanと同じです。RL Languageファクト・タイプには、RL Languageファクト・タイプ、Javaファクト・タイプ、プリミティブ・タイプのいずれかのメンバーのリストが含まれています。RL Languageファクト・タイプを使用すると、動的な仮想型を提供することでJavaアプリケーションのオブジェクト・モデルを拡張できます。

次に例を示します。

If customer spent $500 within past 3 months

then customer is a Gold Customer

このルールでは、顧客データを指定するJavaファクト・タイプを使用し、RL Languageファクト・タイプ(Gold Customer)を作成するアクションも使用できます。ルールは、次のように、Gold Customerファクトを使用するように定義できます。

If customer is a Gold customer

then offer 10% discount

このルールでは、Gold Customerという名前のRL Languageファクト・タイプを使用しています。このルールは、Gold Customerファクトを使用して、過去3か月間に500ドルの支払があった顧客には10%割引の資格があることを示しています。ルールには、顧客がGold Customerになる他の方法も指定できます。

1.3.5 関数の変数と制約の使用

この項では、次の定義を説明します。

1.3.5.1 関数の定義

Oracle Business Rulesでは、Javaメソッドに類似の方法で関数を定義しますが、RL関数はクラスに属しません。Javaアプリケーション・オブジェクト・モデルはRL関数を使用して拡張できるため、ユーザーは、元のJavaアプリケーション・コードを変更せずに、複数の操作をルールで実行できます。

また、RL関数定義を使用して、同じまたは類似した式を複数のルール間で共有し、結果をアプリケーションに戻すこともできます。

1.3.5.2 変数の定義

変数の定義を使用すると、複数のルールと関数で情報を共有できます。たとえば、複数のルールで10%割引を使用する場合は、変数Gold Discountを作成し、この変数を使用してすべてのルールに適切な割引を適用できます。

変数の定義を使用すると、プログラムをモジュール化して保守を容易にできます。

1.3.5.3 制約の定義

制約の定義によって、ルールのカスタマイズ可能な部分にマークを付けることができます。たとえば、Gold Customerに提供する割引を、5から25パーセントなどの指定範囲内に制限できます。制約を定義してRule Authorを使用すると、ルール全体の変更を禁止する特別なインタフェースを使用して、指定の範囲内から値を選択できます。


注意:

制約の使用は、ルールのカスタマイズをサポートするRule Author機能です(Rule Authorの「ルールのカスタマイズ」タブを使用)。 


1.4 Javaアプリケーションをルール対応にする手順

プログラマとビジネス・アナリストは、協力してJavaアプリケーションをルール対応にします。多くの場合、アプリケーションがルール対応になると、プログラマの作業が軽減され、継続中のルール保守はビジネス・アナリストに任されます。

Javaアプリケーションのルール対応に必要なタスクは、次のとおりです。

これらのタスクには、プログラマとビジネス・アナリスト間の協力が必要です。プログラマには、アプリケーション・コードの理解およびJava開発、Webサービス、XML(ビジネス・オブジェクトがXMLで表現される場合)の知識が必要です。ビジネス・アナリストには、ビジネス・オブジェクトの高レベルな知識が必要であり、ビジネス・オブジェクトに関するif-then文としてルールを理解する知識が必要です。ビジネス・アナリストは、頻繁に変更が必要なルールの各部分を確認する必要もあります。

1.4.1 ルール対応の対象となるアプリケーション領域の識別

ビジネス・アナリストとプログラマは協力して、ビジネス・オブジェクトを、ビジネス・ルールでの使用に適したファクトとして公開します。ビジネス・ルールで使用する必要のあるビジネス・ファクトは、ビジネス・アナリストとプログラマで決定します。これらのビジネス・オブジェクトには、頻繁な変更を必要とするポリシーや、変化の早いビジネス・プロセスに対応するために変化するその他のポリシーがあります。

ビジネス・アナリストは、どの機能がルールドリブンとなるかを判別します。たとえば、オンライン・ショッピング・アプリケーションでは、税金と販促に関する機能はルールドリブンとなりますが、ショッピング・カートや製品カタログは対象となりません。

1.4.2 データ・モデル用のRule Author定義の準備

プログラマは、Rule Authorの定義を使用してデータ・モデルを指定します。プログラマは、ビジネス・アナリストと協力して、有用な関数、中間ファクト、変数および制約も定義する必要があります。

1.4.3 データ・モデルに関するビジネス用語の開発

プログラマとビジネス・アナリストは、Rule Authorなどのツールを使用して、Rule Author定義に関するわかりやすいビジネス用語を開発します。これによって、ルールがさらに理解しやすくなります。ビジネス・アナリストは、取得の対象となるビジネス・ファクト、関数および他の定義を確認しながら、ビジネス用語を開発します。

1.4.4 ルールの記述とカスタマイズ

この段階で、ビジネス・アナリストは、定義したビジネス用語を使用し、Rule Authorでルールを記述およびカスタマイズできます。また、プログラマはRules SDKを使用してルールを作成または変更したり、ルール対応アプリケーションの管理部分内のデータ・モデルを作成または変更できます。

1.4.5 Oracle Rules Engineを使用するアプリケーション・ロジックの変更または作成

プログラマは、プロシージャ機能を新規のルールドリブン機能で置換する方法を決定します。アプリケーションがJavaで記述されている場合、そのアプリケーション・コードはRules Engineを直接起動できます。そうでない場合、プログラマは、Webサービスまたは他のリモートAPIを使用して、Rules Engineを起動する必要があります。プログラマは、新しいアプリケーションを作成するか、既存のアプリケーションを変更して、Rules Engineと対話する必要があります。


注意:

ルールに対応しているプロシージャ・コードは、既存のルールをコードから抽出するために利用される場合があります。 


関連項目:

Rule Authorの使用に関する詳細とJavaアプリケーションをルール対応にするためにプログラマが実行する手順については、第2章「Rule Authorの開始」を参照してください。 

1.4.6 ルール対応アプリケーションのテスト

プログラマとビジネス・アナリストは、アプリケーションをテストします。プログラマは一連のテストを提供し、また、複雑なルールセットのデバッグ作業を手助けする必要もあります。プログラマはRules Engineのトレース機能を有効にして、ファクト、ルールのアクティブ化、およびルールの起動に関する情報を提供できます。プログラマは、一連のビジネス・アナリスト・ルールを検証するテスト・ファクトをロードするための自動メカニズムを開発する必要があります。


1 ファクト参照は、入力ノードから出力ノードまでのフローです。入力ノードと出力ノード間にはテスト・ノードと結合ノードがあります。テストは、ルール条件にブール式がある場合に発生します。結合は、ルール条件ANDによって2つのファクトが結合される場合に発生します。ルールがアクティブ化されるのは、その出力ノードにファクト参照が含まれている場合です。ファクト参照は、アクティブ化されたルールの再計算を速めるために、ネットワーク全体にキャッシュされます。ファクトが追加、削除または変更されると、Reteネットワークは、キャッシュとルールのアクティブ化を更新します。これに必要なのは、作業の増分のみです。


戻る 次へ
Oracle
Copyright © 2005, 2006, Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引