Oracle Business Rulesを使用すると、アプリケーションでは、規制上および競合上の要求に対する迅速な対応やポリシー変更のサポートが可能になります。 Oracle Business Rulesを使用すると、ビジネス・アナリストおよび技術者以外の他のユーザーは、ビジネス・ポリシーに関連するアプリケーション・ロジックを、グラフィカル・ユーザー・インタフェースを使用してプログラマの支援なしに変更できます。 たとえば、銀行業のアカウント・マネージャは、変更された政府の規制に応じて、預入保証金の金額を設定できます。 BPELアプリケーションでは、デシジョン・サービスを使用してOracle Business Rulesを起動できます。 この結果、BPELアプリケーションでは、XMLでのWebコンピューティングの標準を利用してルール・アプリケーションを実行することで、サービス指向アーキテクチャ(SOA)の理論的な枠組がサポートされます。
BPELのデシジョン・サービスとともにOracle Business Rulesを使用すると、次の重要な利点が得られます。
BPELでは、サービス、システム、ユーザーおよびパートナのオーケストレーションが提供されます。
Oracle Business Rulesでは、意思決定およびポリシーに焦点が絞られます。
Oracle Business Rulesを使用すると、ビジネス・ユーザーはビジネス・プロセスに参加できます。
Oracle Business Rulesでは、変更および新規ルールが、プロセスを再デプロイせずに使用できます。
SOAアプリケーションでは、開発者は、ビジネス・ポリシーの判断にルールを使用でき、ビジネス・アナリストは、この敏捷なビジネス・ポリシーに基づいてビジネス・ルールを更新または変更できます。 ビジネス・アナリストは、Oracle BPEL Controlで、Rule Authorへのリンクを提供する「プロセス・ディスクリプタ」タブを使用してルールを変更できます。
Rule Authorでは、Webブラウザを使用して任意の場所からルールを操作でき、新規ルールの作成および既存ルールの編集のためのpoint-and-clickインタフェースが提供されます。 また、Rule Authorによって、ルール開発者のルール作成に必要な作業が軽減されます。
この章では、次のことを理解できます。
ビジネス・ルールを作成および変更するためのRule Authorの起動方法および使用方法
XMLスキーマに基づいたデータ・モデルの作成方法
顧客によるデータ入力をXML文書として評価するビジネス・ルールの記述方法
リポジトリへのビジネス・ルールの保存方法
ビジネス・ルールとはビジネス・ポリシーを記述した複数の文です。 たとえば、レンタカー会社では、次のような運転者の年齢制限ビジネス・ルールを使用できます。
運転者の年齢が21歳未満の場合、貸し出しを拒否する。
航空会社では、次のようなビジネス・ルールを使用できます。
頻度の高い飛行機利用客アカウントの年間飛行距離合計が100,000マイルを超える場合、ステータスを「ゴールド」とする。
電子機器を販売する会社では、次のようなビジネス・ルールを使用できます。
顧客のステータスが「プラチナ」、または注文が$1,000未満の場合、手動による介入なしで注文を承認する。
これらの例は、個別のビジネス・ルールを示しています。 実際には、Oracle Business Rulesを使用して多数のビジネス・ルールを組み合せることができます。
たとえば、レンタカー会社の場合は、運転者の年齢ルールに年齢制限ルールという名前を指定できます。 年齢制限ルールなどのビジネス・ルールは、従来、アプリケーション・コードに組み込まれ、Javaアプリケーションでは、次のように表示されていました。
public boolean checkUnderAgeRule (Driver driver) { boolean declineRent = false; int age = driver.getAge(); if( age < 21 ) { declineRent = true; } return declineRent; }
技術者以外のユーザーが、このようなコードを読んで理解し、変更することは困難です。 たとえば、レンタカー会社が、19歳未満のすべての運転者が車両をレンタルできないように、そのポリシーを19歳未満に改訂すると仮定します。 多くの本番環境では、開発者がアプリケーションを変更し、変更したアプリケーションを再コンパイルして再デプロイする必要があります。 このプロセスは、Oracle Business Rulesを使用することで、簡素化できます。これは、ルール・アプリケーションでは、ビジネス・ポリシーの変更を容易にサポートできるためです。
BPELのデシジョン・サービスおよびOracle Business Rulesを使用するには、最初に、次に示すようなビジネス・ルールに関連する用語を理解する必要があります。
ファクト: 式が評価するデータまたはオブジェクトです。 たとえば、ファクトは、融資アプリケーション、顧客の与信履歴または所得データを表すことができます。 この章のルールは、顧客のステータスを記述した顧客データが含まれたファクトに基づいて運用されます。顧客のステータスは、特定の年の顧客の取引高に基づいた「Gold」、「Silver」または「Platinum」の各ステータスです。
ルール: ファクトに対する次の式です。
If (<condition involving Facts>) then <actions>
次に例を示します。
If customer status is Gold then discount is 20%
アクション: あるルールが、現在のナレッジ・ベースまたは一連のファクトに一致した場合に、実行されるアクティビティを記述します。
データ・モデル: Oracle Business Rulesのファクトは、Rules Engineでアサートされるデータ・オブジェクトです。 年齢制限ルールなどのルールによって、ファクトは制約され、サポートされます。 Oracle Business Rulesのデータ・モデルは、ビジネス・ルールの作成に使用できるファクトまたはビジネス・オブジェクトのタイプを指定します。 たとえば、運転者の年齢に一致したルールを作成する必要があるレンタカー会社の場合は、運転者の情報が、ルールで使用するファクトを表します。 Rule Authorを使用すると、データ・モデルを定義し、ルールの作成時にそのデータ・モデルでオブジェクトを使用できます。
ディクショナリ: ルールセットの集まりと、その関連するデータ・モデルで、1つの名前に1つ以上のバージョンを指定してリポジトリに格納されます。 Rule Authorでは、ルールはディクショナリに格納され、そのディクショナリはリポジトリに保存されます。 必要な数のディクショナリを作成できます。各ディクショナリには複数のバージョンを設定できます。 BPELのデシジョン・サービスでは、decideアクティビティが起動されると、ディクショナリにアクセスし、そのディクショナリ内のルールを使用します。
(Rule Author以外で作成され、この章の説明に従ってリポジトリに格納された)既存のルール定義およびファクトを使用するには、デシジョン・サービスでのルールおよびファクトの使用方法を理解しておくことが有用になります。
BPELおよびデシジョン・サービス
デシジョン・サービスを使用すると、ルールセットおよびOracle Rules Repositoryに書き込まれているXMLファクトに対して実行される共通の操作をモデル化できます。 デシジョン・サービスでは、ルールセットを、ビジネス・プロセスから起動できるWebサービスとしてラップすることで、設計操作を簡素化しています。 デシジョン・サービスでは、これらのルールを変更するためのユーザー・インタフェースが提供されません(これらのルールの変更にはRule Authorを使用します)。
他のタイプのルール・アプリケーションを開発する場合は、JavaオブジェクトまたはXML文書を使用して、ルール・エンジンとの間で情報の受渡しを実行できます。
BPELでJavaファクトを利用する手順は、次のとおりです。
Javaインタフェースを作成し、WebService Assemblerを使用してBPELに公開します。
Rule Authorを使用して、ローカルのJDeveloperクラス・フォルダを指定します(JavaファクトがJDeveloperプロジェクトの一部になります)。
BPELからのルールの使用
BPELからルールを使用する手順は、次のとおりです。
JDeveloperまたはRule Authorでルール・リポジトリを作成し、XMLを使用してファクトをモデル化します。
BPELで、そのルール・リポジトリを参照するデシジョン・サービス・パートナ・リンクを作成します。
注意: ファクト・モデルをRule Authorで編集した場合は、サービス定義が影響を受けるため、BPELパートナ・リンクを再同期化する必要があります。 第7.8.1項「デシジョン・サービス・ウィザードを使用したデシジョン・サービス・パートナ・リンクの作成方法」を参照してください。 |
アプリケーションとルールの統合
アプリケーションとルール・エンジンは、ルール・エンジン(RulesSession)に対応したJava APIを使用して統合できます。手順は次のとおりです。
Javaルール、Rules RLおよびランタイムRulesSessionを使用して、推論エンジンを作成します。
この推論エンジンを、JDeveloperを使用してWebサービスとして公開し、BPELでこのWebサービスを使用します。
Oracle Rules Engine実装は、それ自体が100%Javaで、最下位レベルではJavaファクトに基づいて運用されます。 XMLで使用するために、Rule Authorでは、JAXBを使用してXSDをJavaオブジェクトにコンパイルします。 実行時には、すべてのルール・エンジン・ファクトがJavaファクトになります。 開発者は、次の操作を選択できます。
XMLでファクトをモデル化し、モデル化したファクトをバックグラウンドでシームレスにJavaにコンパイルします。または、
Javaを使用してファクトをモデル化し、Webサービスとして公開します。この場合、JavaからXMLへのマーシャリングは、Webサービス・スタックによって管理されます。
図8-1では、XMLファクトがJAXBを使用してJavaファクトにバインドされています。 基礎となるRulesSessionで実行されるのは、常にJavaファクトです。 RulesSessionには、DecisionServiceを介して(XMLファクト・ルートで)インタフェースできます。下位レベルでの統合が必要な場合は、RulesSession/JavaファクトをJAX-RPC Webサービスでラップできます。 推奨される方法は、XMLファクトを使用してモデル化し、DecisionServiceを使用する方法です。