データ・モデルを定義した後は、そのデータ・モデルに基づいてビジネス・ポリシーを定義するためのルールを作成できます。 たとえば、SOA Order Bookingアプリケーションでは、受注に関するビジネス・ポリシーを指定するルールをいくつか定義しています。 このルール・アプリケーションでは、これらのルールによって、注文に対して手動による与信承認が必要かどうかが判断されます。
通常、ルールは、ビジネス・ポリシーを定義するために使用します。 たとえば、SOA Order Bookingアプリケーションのルールでは、顧客のステータスが「platinum」である場合は、手動による承認が不要であることが指定されています。 「platinum」以外の顧客の場合、ルールによって、注文の金額が$1000以上の場合は手動による承認が必要で、$1000未満の場合は自動的に承認されることが指定されています。
使用しているアプリケーションでビジネス・ポリシーを定義するには、ルールセットを定義してルールを作成する必要があります。
ルールを作成する前に、ルールセットを作成する必要があります。 ルールセットとはルールのコンテナです。
ルールセットを作成する手順は、次のとおりです。
「ルールセット」タブをクリックします。
ナビゲーション・ツリーで、「ルールセット」ノードをクリックします。 ルールセット・サマリー・ページが表示されます。
ルールセット・サマリー・ページで、「作成」をクリックします。 ルールセット・ページが表示されます。
「名前」フィールドに、名前を入力します。 たとえば、SOA Order Bookingアプリケーションのルールセットの場合は、「ApproveOrderRequired
」と入力します。
(オプション)「説明」フィールドにテキストを入力します。
「OK」をクリックします。
ルールセットが作成されます。 ルールセットを作成した後は、図8-11に示すように、新規エントリが、「ルールセット」の下のルールセット・ツリーに表示されます。
ディクショナリを保存します。
ルールセットを作成した後は、そのルールセットにルールを作成できます。 このルールによって、ビジネス・ポリシーが決定します。 たとえば、SOA Order Bookingアプリケーションでは、次のビジネス・ポリシーに関するルールが定義されています。
belowLimit: 金額が$1000未満の場合、その注文は自動的に承認されます。
overLimit: 「platinum」以外の顧客で、金額が$1000以上の場合、その注文は手動による承認が必要です。
platinumMember: 顧客のステータスが「platinum」の場合、注文は、その金額に関係なく自動的に承認されます。
ルールを作成する手順は、次のとおりです。
「ルールセット」タブをクリックします。 ナビゲーション・ペインに、「ルールセット」フォルダが表示されます。 たとえば、SOA Order Bookingアプリケーションの場合、「ルールセット」フォルダにはApproveOrderRequired
ルールが格納されています。
「ルールセット」フォルダでノードをクリックします。 たとえば、ナビゲーション・ツリーで、「ApproveOrderRequired」ノードをクリックします。 「ルール」表が含まれたルールセット・ページが表示されます(図8-12を参照)。
注意: 初めてルールを作成する場合、「ルール」表は空です。 |
「作成」をクリックします。 ルール・ページが表示されます。
ルール・ページの「名前」フィールドにルールの名前を入力します。 たとえば、「belowLimit
」と入力します。
ルール・ページの「優先度」フィールドにルールに対するルール優先度を入力します。 たとえば、「0」と入力します(0
はデフォルトの優先度です)。
注意: 「優先度」フィールドによって、複数のルールが適用される場合に機能するルールとその順序が決定します。 ルールを使用するアプリケーションの多くは、決定に到達するまではルールが順不同で適用されるため、優先度の設定は不要です。 |
(オプション)「説明」フィールドに、説明を入力します。 たとえば、図8-13を参照してください。
実行中のルール・エンジンは、ルールを使用して、パターンの一致に使用できるファクトを確認します。 ルール・エンジンによるパターンの一致を可能にするために、ルールにパターンを追加する必要があります。
ルールにパターンを追加する手順は、次のとおりです。
ルール・ページで、「if」ボックスの「新規パターン」をクリックします。
パターン定義ページが表示されます。 パターン定義ページには、「パターンの選択」と「パターンのテストを定義」の2つの領域があります。
「パターンの選択」の下にある最初のリストで、最初のエントリ(空白)を選択します。
このリストによって、一致するたびにルールを起動することが指定されます。 別の値の1つである「次のケースが少なくとも1つある」は、少なくとも1つが一致する(そのような要因が1つある)場合にルールを1回起動することを選択します。 もう1つの値の「次のケースがない」は、一致しない場合にルールを1回起動することを指定します。
「パターンの選択」の下にある2番目のテキスト・ボックスに、一致したファクトに対する一時的な名前を入力します。
たとえば、このフィールドに「approve
」と入力します(これによって、パターンのバインド変数名が定義されます)。
このフィールドを使用すると、単一のルールで同じタイプの複数のインスタンスをテストできます。
最後のリストには、「<選択>」というテキストが含まれており、このリストに、使用可能なファクト・タイプが表示されます。 このリストで、「
ApproveType
」を選択します(図8-14を参照)。
パターン定義ページで「OK」をクリックし、パターン定義を保存してパターン定義ページを閉じます。
ルールセット・ページで「OK」をクリックし、ルールを保存します。
注意: パターンに対する変更内容は、ルール・ページで「OK」または「適用」をクリックするまで、ルールに追加されません。 「OK」または「適用」をクリックする前に、別のルールセットに移動したり、異なるタブを選択すると、パターン定義の変更は破棄されます。 |
ディクショナリを保存します。
パターンにテストが定義されていない場合、定義したアクションはすべてのapproveTypesに適用されます。 パターンにテストを定義するには、第8.7.2.2項の説明に従って続行します。 ルール・アクションについては、第8.7.2.3項「ルールに対するアクションの追加」を参照してください。
パターンのテストによって、ルール・エンジンは、ルールの一致を、テスト要件に一致するデータ項目に制限できます。 たとえば、Global Companyがテストに使用するbelowLimit
ルールでは、注文に関連する価格が指定した承認制限を下回っていることが指定されます。
ルールに対してパターン・テストを追加する手順は、次のとおりです。
ナビゲーション・ツリーの「ルールセット」タブで、テストを追加するルールをクリックします。 たとえば、「belowLimit
」ルールをクリックします。
ルール・ページの「if」表で鉛筆アイコンを選択し、このルールに対するパターン定義ページを表示します。
パターン定義ページで、「標準テスト」を選択して「作成」をクリックします(図8-15を参照)。
図8-15 「標準テスト」フィールドが表示されたRule Authorのルールのパターン定義ページ
「オペランド」列で、リストから1つのフィールド(approve.price
など)を選択します。
「演算子」列で、「<
」(より小さい)を選択します。
「オペランド(値またはフィールドを選択)」列で、リストから1つのフィールド(AUTOMATED_ORDER_LIMIT
など)を選択します。
「値」ボックスと「フィールド」ボックスの横には、「Any
」と「Fixed
」の値が含まれているリストがあります(図8-16を参照)。 これらの両方のフィールドに対して「Fixed
」(デフォルト)を選択します。
図8-16 belowLimitルールの値が表示されたRule Authorのパターン定義ページ
パターン定義ページで「OK」をクリックし、変更内容を保存してパターン定義ページを閉じます。
ルール・ページで、「OK」または「適用」をクリックします。
注意: パターンに対する変更内容は、ルール・ページで「OK」または「適用」をクリックするまで、ルールに追加されません。 「OK」または「適用」をクリックしない場合、ルールに対する作業内容は保存されません。 |
ディクショナリを保存します。
アクションはパターンの一致と関連しています。 実行時に、ルールの「if」部分が一致すると、ルール・エンジンは、「then」部分を実行して、そのルールに関連した1つまたは複数のアクションを実行します。 表8-1に、ルールの作成時に使用できるRule Authorのアクション・タイプを示します。
表8-1 アクション・タイプ
アクション・タイプ | 説明 |
---|---|
Assert |
パターンで使用されるファクトをアサートします。 パターンで一致したファクトが変更された場合は、ルール・エンジンにその変更を通知するために、そのファクトを再度アサートする必要があります。 |
Assert New |
新規のファクト・タイプ・インスタンスを作成して、ルール・エンジンにアサートします。 |
Assign |
値を変数またはファクトのプロパティに割り当てます。 新規の値がファクト・プロパティに割り当てられた場合は、その新規の値でルールを再評価するために、ファクトを再度アサートする必要があります。 |
Call |
関数をコールしてアクションを実行できます。 |
Retract |
パターンで使用されるファクトを取り消します。 ファクトを取り消すには、次のような様々な理由があります。
|
RL |
直接実行される自由形式のRL言語を作成します。 RL言語の構文はSDKによる検証がないため、RLアクションの作成によって、ルールセットから無効なRLコードが生成される可能性があります。 |
ルール・パターンの一致に関連付けられている値を割り当てるアクションを追加する手順は、次のとおりです。
「ルールセット」タブをクリックします。
ナビゲーション・ツリーで、該当するルールのノードをクリックします。
ルール・ページの「then」ボックスで、「新規アクション」をクリックします。 アクションの追加ページが表示されます。
「アクション・タイプ」ボックスから「Assign」
項目を選択します。 「アクション・パラメータ」ボックスが表示されます。
「名前」フィールドから該当するアクション変数を選択します。
「式」フィールドに、式の値を入力します。
「OK」をクリックし、変更内容を保存してアクションの追加ページを閉じます。
ルール・ページで、「OK」または「適用」をクリックします。
ディクショナリを保存します。
たとえば、belowLimit
ルールに対してアクションを追加する手順は、次のとおりです。
belowLimit
ルール・パターンの一致に関連付けられている値を割り当てるアクションを追加する手順は、次のとおりです。
「ルールセット」タブをクリックします。
ナビゲーション・ツリーで、「ApproveOrderRequired
」の下にある「belowLimit
」ノードをクリックします。
ルール・ページの「then」ボックスで、「新規アクション」をクリックします。 アクションの追加ページが表示されます。
「アクション・タイプ」ボックスから「Assign」
項目を選択します。 「アクション・パラメータ」ボックスが表示されます。
「名前」フィールドから「approve.approvalRequired
」を選択します。
「式」フィールドに、式の値の「false
」を入力します(図8-17を参照)。
「OK」をクリックし、変更内容を保存してアクションの追加ページを閉じます。
ルール・ページで、「OK」または「適用」をクリックします。
ディクショナリを保存します。
ルールセットおよびルールを定義する場合は、アプリケーションに対してビジネス・ポリシーを指定します。 たとえば、SOA Order Bookingのアプリケーションでは、注文に対して手動による与信の承認が必要かどうかを、注文高と顧客ステータスに基づいて判断するビジネス・ポリシーがルールによって指定されます。 実行時に、アプリケーションは、ルール・エンジンでアサートされたファクトに対してルールを実行し、結果を戻すか、またはファクトに一致するルールに基づいてアクションを実行します。 BPELのデシジョン・サービスの使用については、第7.8項「ビジネス・ルールおよびdecideアクティビティの使用」を参照してください。
BPELおよびデシジョン・サービスを使用する場合、デシジョン・サービスとの間では、XML文書を使用した情報の受渡しのみが可能です。 他のタイプのルール・アプリケーションを開発する場合は、JavaオブジェクトまたはXML文書を使用して、ルール・エンジンとの間で情報の受渡しを実行できます。