ヘッダーをスキップ

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

B31866-02
目次
目次
索引
索引

戻る 次へ

2 Rule Authorの開始

この章では、Oracle Business Rules Rule Author(Rule Author)をチュートリアル形式で紹介します。Rule Authorの起動方法、データ・モデルの作成方法およびルールの作成および保存方法について説明します。また、Rules Engineとともに動作するJavaサンプル・アプリケーションの作成方法も示します。

このマニュアルでは、レンタカー・サンプルを使用して、Rule Authorでの作業方法を説明します。レンタカー・サンプルでは、運転者データを使用して運転者情報を指定し、ビジネス・ルールを使用してレンタカー会社のサービス担当が運転者の年齢制限により車両の貸出しを断る必要があるかどうかを判断します。この例を使用して、UnderAgeルールという1つのルールを作成します(ルールはレンタカー会社のビジネス・ルールに従って指定されます)。

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

2.1 Rule Authorユーザーの作成

Oracle Application Serverを使用している場合は、最初に適切な権限を持つユーザーを作成してから、Rule Authorを起動して使用する必要があります。手順は次のとおりです。


注意:

これらの説明は、コンテナがJAZN XMLプロバイダとともに構成されていることを前提にしています。この前提と異なる場合は、ユーザーの作成に関する情報について適切なセキュリティ・ドキュメントを参照してください。 


  1. Application Server Controlを使用して、Rule AuthorがデプロイされているOC4Jインスタンスに移動します。

  2. 「管理」タブをクリックします。

  3. 「タスク名」列で、「セキュリティ・プロバイダ」タスクを検索し、対応する行の「タスクに移動」アイコンをクリックします。

  4. 「インスタンス・レベルのセキュリティ」をクリックします。

  5. 「レルム」タブをクリックします。

  6. 「結果」セクションの表で、「ユーザー」列の番号をクリックしてユーザーを追加します。

  7. 「作成」ボタンをクリックします。

    「名前」フィールドにRule Authorへのログインに使用する名前(ruleadminなど)を入力します。このユーザーのパスワードを入力および確認します。「ロールの割当て」セクションで、ダブルクリックまたは矢印を使用して、このユーザーにrule-administratorsロールを割り当てます。作業が終了した後、「OK」をクリックします。


    注意:

    Rule Author認証が機能するには、Rule Authorユーザーがrule-administratorsロールに属している必要があります。 


  8. Rule Authorアプリケーションを再起動します。

2.2 Rule Authorの起動

Rule Authorは、ホーム・ページのURLを入力することで起動します。ホーム・ページのURLには、通常、ホスト・コンピュータ名とインストール時にアプリケーション・サーバーに対して割り当てられたポート番号、およびRule Authorのホーム・ページのパスが含まれています。次に例を示します。

http://myhost1.mycompany.com:8888/ruleauthor/


注意:

Oracle Application Serverに対して割り当てられるポート番号は、$ORACLE_HOME/installディレクトリにあるreadme.txtファイルに記載されています。 


図2-1に、Rule Authorの「ログイン」ページを示します。Rule Authorユーザーの作成(2.1項「Rule Authorユーザーの作成」)時に指定したユーザー名とパスワードを指定します。

図 2-1    Rule AuthorのSingle Sign-onの「ログイン」ページ


画像の説明

ログインしてから、「リポジトリ」タブをクリックすると、Rule Authorのリポジトリ接続ページが表示されます(図2-2を参照)。操作を実行する前に、リポジトリに接続する必要があります。詳細は、2.4.1項「Rule Authorリポジトリへの接続」を参照してください。

図 2-2    Rule Authorの「リポジトリ」タブに表示される最初の「接続」ページ


画像の説明

Rule Authorの各ページには、「ログアウト」、「ヘルプ」、および「バージョン情報」へのリンクが示されます。これらのリンクは次のように使用できます。

2.3 Rule Authorのホーム・ページ

「ホーム」タブをクリックして、Rule Authorのホーム・ページにアクセスします(図2-4を参照)。ホーム・ページには2つのペインがあります。上部のペインには複数のタブが表示され、下部のペインには現在選択されているタブの内容が表示されます。

図 2-4    Rule Authorのホーム・ページ


画像の説明

2.4 レンタカー・サンプルに対するディクショナリの作成および保存

Rule Authorでの作業は、ディクショナリから着手する必要があります。Rule Authorでは、ルールおよび関連する定義をディクショナリに格納します。ディクショナリを作成または保存するには、最初に、ディクショナリを格納するリポジトリに接続する必要があります。出荷時のRule Authorでは、WebDAV(Web Distributed Authoring and Versioning)リポジトリとファイル・リポジトリの2種類のリポジトリがサポートされています。ここでは、Java版How-Toのディクショナリを作成し、保存します。

この章の例では、ディクショナリをWebDAVリポジトリに保存します。


注意:

この章に記載されているディクショナリを作成するには、WebDAVリポジトリまたはファイル・リポジトリを使用して新しいディクショナリを作成するか、あるいはJava版How-Toとともに提供される/dictディレクトリのCarRepositoryファイル・リポジトリから完全なディクショナリをロードできます。

手順については、2.4.2項「Rule Authorディクショナリの作成」を参照してください。 


2.4.1 Rule Authorリポジトリへの接続

Oracle Business Rulesでは、ルールおよびそのルールに関連付けられているデータ・モデルをディクショナリに格納します。ディクショナリはリポジトリに作成および保存されます。


注意:

WebDAVリポジトリを使用する場合、このリポジトリが、接続する前に存在している必要があります。詳細は、付録B「リポジトリを利用したRule AuthorとRules SDKの使用」を参照してください。 


リポジトリに接続する手順は、次のとおりです。

  1. 「リポジトリ」タブをクリックします。

  2. 「接続」第2タブをクリックします。

  3. 「リポジトリ・タイプ」フィールドで「WebDAV」リポジトリ・タイプを選択します。

  4. URLをWebDAVリポジトリに入力します(図2-5を参照)。URLは次の形式で指定する必要があります。

    http://www.fully_qualified_host_name.com:port/repository_name
    


    注意:

    認証が実行されるように、URLには完全修飾ホスト名を使用する必要があります。  


    図 2-5    Rule AuthorのWebDAVリポジトリの「接続」ページ


    画像の説明

    WebDAVリポジトリの設定方法の詳細は、B.1項「WebDAVリポジトリの使用」を参照してください。

  5. Rule Authorが動作するシステムとWebDAVサーバーの間にプロキシがある場合、Rule Authorには「プロキシ・ユーザー」フィールドと「プロキシ・パスワード」フィールドも表示されます。

  6. 「接続」をクリックします。「接続」をクリックすると、Rule Authorは、確認メッセージ(図2-6を参照)を表示します。


    注意:

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


    図 2-6    Rule Authorの「リポジトリ」タブにある「接続」ページの「確認」


    画像の説明

    関連項目:

    「プロキシを使用したWebDAVリポジトリへの接続」 

2.4.2 Rule Authorディクショナリの作成

Rule Authorディクショナリは最上位コンテナであり、Rule Authorで作業する起点となります。ディクショナリは、通常、アプリケーションのルール部分に対応しています。


注意:

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


ディクショナリを作成する手順は、次のとおりです。

  1. 「リポジトリ」タブからリポジトリに接続します。

  2. 「作成」をクリックします。

  3. 「新規ディクショナリ名」フィールドにディクショナリ名を入力します。この例では、CarRentalと入力します(図2-7を参照)。

  4. 「作成」をクリックします。「作成」をクリックすると、Rule Authorは確認メッセージを表示します。

    図 2-7    Rule Authorの「ディクショナリを作成」ページ


    画像の説明


    注意:

    独自のディクショナリの作成に加えて、Java版How-Toとともに提供される完全なレンタカー・ディクショナリも使用できます。このディクショナリは、/dictディレクトリのCarRepositoryファイル・リポジトリにあります。このディクショナリを使用する手順は、次のとおりです。

    1. 「リポジトリ」タブをクリックします。
       

    2. 「接続」第2タブをクリックします。
       

    3. 「リポジトリ・タイプ」ボックスで「ファイル」を選択します。
       

    4. ファイル・リポジトリの完全パスを「ファイルの場所」フィールドに入力します。たとえば、C:/demo/dict/CarRepositoryと入力します。
       

    5. 「接続」をクリックします。


2.4.3 Rule Authorディクショナリのバージョン付き保存

別のディクショナリ名で保存する場合や現行のディクショナリにバージョンを指定する場合は、次のように「別名保存」を使用します。

  1. 「リポジトリ」タブをクリックします。

  2. 「別名保存」第2タブをクリックします。

  3. 「ディクショナリ」フィールドにディクショナリ名を入力します(CarRentalなど)。

  4. バージョンを指定するには、「バージョン」フィールドにバージョンを入力します。たとえば、HowToなどです(図2-8を参照)。

  5. 「別名保存」をクリックします。「別名保存」をクリックすると、Rule Authorによって確認メッセージが表示されます。

    図 2-8    Rule Authorの「別名保存」ページ


    画像の説明


    注意:

    Rule Authorでは、「別名保存」を使用して、同一の名前とバージョンでディクショナリを上書きできます。「上書き」チェック・ボックスを選択して、同じ名前とバージョンでディクショナリを保存してください。 


2.4.4 Rule Authorディクショナリの保存

データの消失を防止するために、ディクショナリを定期的に保存してください。ディクショナリを保存するには、次のいずれかを実行します。

前述のいずれかの操作を実行した後、「ディクショナリの保存」ページの「保存」をクリックします。「保存」をクリックすると、ステータス領域に確認メッセージが表示されます。次に例を示します。

Dictionary 'CarRental(HowTo)' has been saved


注意:

非アクティブ期間後はRule Authorセッションがタイムアウトになるため、作業に応じて定期的にディクショナリを保存してください。 


関連項目:

Rule Authorのセッションのタイムアウトを構成する方法の詳細、およびタイムアウトの発生時にRule Authorが現在の作業をディクショナリ・バージョンに保存する方法の詳細は、「Rule Authorのセッション・タイムアウト」を参照してください。 

2.5 レンタカー・サンプルに対するデータ・モデルの定義

ルールに対する作業の前に、データ・モデルを定義する必要があります。データ・モデルには、Javaクラス・ファクト・タイプ、XMLファクト・タイプおよびRL Languageファクト・タイプなど、ルールで使用されるファクトやデータ・オブジェクトに関するビジネス・データ定義が格納されます。説明を単純化するために、この項ではJavaファクト・タイプをJavaファクトと記述します。ここでは、Javaファクトのみを取り扱います。

内容は次のとおりです。

2.5.1 レンタカー・サンプルでのファクトとしてのJavaオブジェクトの使用

Java版How-Toには、$HowToDir/libディレクトリのcar-objs.jarファイルが格納されています。このJARファイルには、レンタカー・サンプルのDriverクラスが指定されています。Driverオブジェクトに対するJavaソースは、$HowToDir/src/carrentalディレクトリにあります。HowToDirには、Java版How-Toをインストールしたディレクトリが入ります。

2.5.2 Rule AuthorへのJavaクラスおよびパッケージの追加

Javaファクトをデータ・モデルにインポートする前に、Rule Authorで使用可能なJavaファクトが組み込まれているクラスおよびパッケージを作成する必要があります。そのためには、Rule Authorを使用して、Javaクラスが格納されているクラスパスを指定します。たとえば、DriverというJavaクラスのクラスパスを追加する手順は、次のとおりです。

  1. 「リポジトリ」タブをクリックします。

  2. 2.4.3項でディクショナリを作成した後の場合は、手順3にスキップしてください。「ロード」ページでCarRentalディクショナリとHowToバージョンを選択して、「ロード」をクリックします。

  3. 「定義」タブをクリックします。使用可能な定義が格納された「定義」フォルダがナビゲーション・ツリーに表示されます。メイン・ペインには、なにも表示されません。


    注意:

    Rule Authorでは、通常、下部のペインにナビゲーション・ツリーとコンテンツ領域(メイン・ペイン)が表示されます。「定義」タブを選択すると、ツリー上部に「定義」フォルダが表示されます。 


  4. ツリーの「定義」フォルダには「ファクト」フォルダが表示されます。この「ファクト」フォルダには、使用可能なファクト・タイプのJavaファクトXMLファクトおよびRLファクトが含まれています。

    「Javaファクト」をクリックして「Javaファクト・サマリー」ページを表示します(図2-9を参照)。

    図 2-9    Rule Authorの「定義」タブにある「Javaファクト・サマリー」ページ


    画像の説明

  5. 「作成」をクリックします。「クラス・セレクタ」ページが表示されます。

  6. 「クラス・セレクタ」ページの「ユーザー・クラスパス」フィールドを使用して、クラスパスを追加できます。たとえば、Java版How-Toでは、「ユーザー・クラスパス」フィールドに、次のようにクラスパスを入力します。

    $HowToDir/lib/car-objs.jar

    $HowToDirを、Java版How-Toをインストールしたディレクトリに置換します。

  7. 「追加」をクリックします。「現在のクラスパス」フィールドが更新され、carrentalパッケージが「クラス」ボックスに追加されます(図2-10を参照)。

    図 2-10    Rule Authorの「Javaファクト」の「クラス・セレクタ」ページ


    画像の説明

    関連項目:

    Rule AuthorへのJavaクラスおよびパッケージの追加方法については、2.5.3項を参照してください。 

2.5.3 データ・モデルへのJavaクラスのインポート

次に、「クラス・セレクタ」ページからデータ・モデルにインポートするJavaクラスを選択する必要があります。Driverクラスをデータ・モデルに追加する手順は、次のとおりです。

  1. 「定義」タブをクリックして「定義」ページを表示します。

  2. ナビゲーション・ツリーで、「Javaファクト」フォルダをクリックします。

  3. 「Javaファクト・サマリー」ページで、「作成」をクリックします。「クラス・セレクタ」ページが表示されます。

  4. 「クラス・セレクタ」ページの「クラス」ボックスで、carrentalノードを開いてDriverチェック・ボックスを選択します(図2-11を参照)。

  5. 「インポート」をクリックします。「インポート」をクリックすると、Rule Authorによって確認メッセージが表示されます。

    1 class or package has been imported.
    


    注意:

    クラスがインポートされると、「クラス・セレクタ」ページにインポート済クラスが太字で表示されます。 


    図 2-11    Rule Authorの「Javaファクト」の「クラス・セレクタ」ページ


    画像の説明

ユーザー・クラスパスを指定して、JavaクラスをRule Authorにインポートする際の注意点は、次のとおりです。

2.5.4 現状の定義の保存

「定義」タブでデータ・モデルを操作していて、作業を完了する場合は、ディクショナリを保存してください。

定義をディクショナリに保存する手順は、次のとおりです。

  1. 「ディクショナリの保存」リンクをクリックします。

  2. 「ディクショナリの保存」ページで「保存」をクリックします。

  3. 「定義」タブをクリックして「定義」ページに戻ります。

2.6 レンタカー・サンプルに対するビジネス用語の定義

ビジネス用語を使用することで、ビジネス・アナリストは、Javaパッケージ名、クラス名、メソッド名またはメンバー変数名を使用せずに、簡単に理解できる名前を使用してRule Authorでルールを作成できます。Rule Authorには別名機能が用意されています。この機能を使用すると、ビジネスマン向けの用語を使用してルールのビジネス・オブジェクトまたはファクトを参照できます。必要な手順は、ルールに使用する予定のビジネス・オブジェクトに対して、ビジネス用語を定義することのみです。また、「ルールセット」タブからルールを作成する際は、Rule Authorの「参照可能」ボックスを使用して、Rule Authorのリストに表示するプロパティとメソッドを指定します。

内容は次のとおりです。

2.6.1 Javaファクト定義に対するビジネス用語の指定

Javaファクト定義に対してビジネス用語を指定する手順は、次のとおりです。

  1. 「定義」タブをクリックして「定義」ページを表示します。

  2. ナビゲーション・ツリーで「Javaファクト」ノードをクリックして「Javaファクト・サマリー」ページを表示します。レンタカー・サンプルでは、インポートされたcarrental.Driverクラスを含む表が表示されます。

  3. 編集アイコンをクリックして、carrental.Driverクラスに対するJavaファクトのプロパティとメソッドの表を表示します。

  4. ページ上部の「名前」フィールドの「エイリアス」ボックスに、クラスcarrental.Driver「エイリアス」フィールドの別名DriverDataを入力します。

  5. 「プロパティ」表のageエントリに対して、適切な別名を指定します。たとえば、「エイリアス」フィールドにDriverAgeと入力します。

  6. 「プロパティ」表のnameエントリに対して、適切な別名を指定します。たとえば、「エイリアス」フィールドにDriverNameと入力します。

  7. 「OK」をクリックし、変更内容を保存して「Javaファクト・サマリー」ページに戻ります。


    注意:

    変更後は必ず「OK」または「適用」をクリックしてください。「OK」または「適用」ボタンをクリックしないと、Rule Authorで変更内容が保存されません。 


    関連項目:

    「データ・モデル内のJavaオブジェクトの表示」 

2.6.2 関数に対するビジネス用語の指定

RL Language関数に対してビジネス用語を指定する手順は、次のとおりです。

  1. 「定義」タブをクリックして「定義」ページを表示します。

  2. ナビゲーション・ツリーで、「定義」フォルダの「RL関数」をクリックし、「RL関数サマリー」ページを表示します。レンタカー・サンプルでは、DM.assertXPath関数およびDM.println関数を含む表が表示されます。

  3. DM.println関数について、編集アイコンをクリックして詳細を表示します。

  4. 「名前」フィールドの下にある「エイリアス」フィールドに別名を入力します。たとえば、「エイリアス」フィールドにPrintOutputと入力します。


    注意:

    「エイリアス」フィールドは「関数の引数」表にもあります。この例では、「関数の引数」領域の「エイリアス」フィールドは変更しません。 


  5. 「OK」をクリックし、変更内容を保存して「RL関数サマリー」ページに戻ります。

  6. ディクショナリを保存します。

2.6.3 プロパティとメソッドに対する参照可能性の指定

プロパティまたはメソッドがRule Authorのリストで参照可能かどうかを指定する手順は、次のとおりです。

  1. 「定義」タブをクリックして「定義」ページを表示します。

  2. ナビゲーション・ツリーで「Javaファクト」ノードをクリックして「Javaファクト・サマリー」ページを表示します。レンタカー・サンプルでは、インポートされたcarrental.Driverクラスを含む表が表示されます。

  3. 編集アイコンをクリックして、carrental.Driverに対するJavaファクトのプロパティとメソッドの表を表示します。

  4. 「プロパティ」表の各エントリについて、「参照可能」チェック・ボックスを使用して適切な参照可能性を指定します。この例では、メンバー変数ageおよびnameのみを参照可能にする必要があります。

  5. 「OK」をクリックし、変更内容を保存して「Javaファクト・サマリー」ページに戻ります。

  6. ディクショナリを保存します。


    注意:

    特定のプロパティまたはメソッドに対する参照可能インジケータを変更すると、依存する定義またはルールが誤って表示されることがあります。この状況が発生する場合は、問題の原因となっている参照不可のプロパティまたはメソッドを参照可能に設定してください。 


2.7 レンタカー・サンプルに対するルールの定義

この項では、レンタカー・サンプルのルールを定義し、Rule Authorでルールを作成する基本的な手順を示します。

内容は次のとおりです。

2.7.1 レンタカー・サンプルに対するルールセットの作成

Rule Authorを使用してルールを作成する前に、ルールセットを作成する必要があります。ルールセットとはルールのコンテナです。

ルールセットを作成する手順は、次のとおりです。

  1. 「ルールセット」タブをクリックします。

  2. ナビゲーション・ツリーで「ルールセット」ノードをクリックします。

  3. 「ルールセット・サマリー」ページで、「作成」をクリックします。「ルールセット」ページが表示されます。

  4. 「名前」フィールドにテキストを入力します。たとえば、「名前」フィールドにvehicleRentと入力します。

  5. (オプション)「説明」フィールドにルールセットの説明を入力します(図2-12を参照)。

    図 2-12    Rule Authorの「ルールセット」ページ


    画像の説明

  6. 「OK」をクリックして、vehicleRentルールセットを作成します。「OK」をクリックすると、ナビゲーション・ツリーの「ルールセット」の下に新しいルールセットが表示されます。

  7. ディクショナリを保存します。


    注意:

    ルールセットを削除する手順は、次のとおりです。

    1. ナビゲーション・ペインで「ルールセット」フォルダを選択します。
       

    2. 「選択」フィールドのチェック・ボックスを選択することで、「ルールセット」領域で適切なルールセットを選択します。
       

    3. 「削除」を選択します。


2.7.2 レンタカー・サンプルに対するルールの作成

ルールセットを作成した後は、ルールセットにルールを作成できます。ここでは、UnderAgeというルールを作成します。このルールは、次の内容をテストします。

If the age of a driver is younger than 21, then decline to rent

UnderAgeルールには、Rules Engineが照合する単一のパターンと、そのパターンに適用されるテストが指定されます。

次のアクションがUnderAgeルールに関連付けられます。

2.7.2.1 レンタカー・サンプルに対するUnderAgeルールの追加

Rule Authorを使用してUnderAgeルールを追加する手順は、次のとおりです。

  1. 「ルールセット」タブをクリックします。ナビゲーション・ペインには、「レンタカー・サンプルに対するルールセットの作成」の項で作成したvehicleRentルールセットが格納された「ルールセット」フォルダが表示されます。

  2. ナビゲーション・ツリーで、vehicleRentフォルダをクリックします。「ルールセット」ページが表示され、ルールが表にリストされます(図2-13を参照)。


    注意:

    以前に作成したルールがない場合、「ルール」表は空です。 


    図 2-13    Rule Authorの「ルールセット」ページに表示されている「ルール」表


    画像の説明

  3. 「作成」をクリックします。「ルール」ページが表示されます。

  4. 「名前」フィールドにUnderAgeと入力します。

  5. 「優先度」フィールドのデフォルト値(0)は変更しないでください。


    注意:

    「優先度」フィールドでルールの優先度が決まります。ルール優先度は、ルールセットの複数のルールが適用される場合に機能するルールとその順序を指定します。ルールを使用するアプリケーションの多くは、決定が下されるまではルールセットのルールが順不同で適用されるため、ルール優先度の設定は必須ではありません。 


  6. 「説明」フィールドにUnder age driver ruleと入力します(図2-14を参照)。

    図 2-14    Rule Authorの「ルール」ページ


    画像の説明

    関連項目:

    ルール優先度の使用に関する詳細は、『Oracle Business Rulesランゲージ・リファレンス』を参照してください。 

2.7.2.2 UnderAgeルールへのパターンの追加

Rules Engineを実行すると、ルール・パターンに対してファクトがチェックされ、一致するパターンが検索されます。UnderAgeルールのパターンを追加するには、次の手順を実行します。

  1. 「ルール」ページで、「if」ボックスから「新規パターン」をクリックします。「パターン定義」ページが表示されます。このページには、「パターンの選択」と「パターンのテストを定義」の2つの領域があります(図2-15を参照)。


    注意:

    「パターン定義」ページが表示されない場合は、ブラウザのポップアップ遮断機能が使用可能になっている可能性があります。Rule Authorを使用するには、ポップアップ遮断機能を使用不可にする必要があります。 


    図 2-15    Rule Authorの「パターン定義」ページ


    画像の説明

  2. 「パターンの選択」の下にある最初のボックスで、最初の選択肢を選択します(選択ボックスに値は表示されません)。

    このボックスは、一致するたびに(一致するすべての運転者に)、ルールを起動することを指定します。別の選択肢の1つである「次のケースが少なくとも1つある」の値は、少なくとも1つが一致する(そのような運転者が1人いる)場合に、ルールを1回行うことを選択します。「次のケースがない」の値は、一致しない(一致する運転者がいない)場合に、ルールを1回起動することを指定します。

  3. 「パターンの選択」の下にある隣の領域には、一致したファクトに暫定的な名前を入力できます。このフィールドにdriverと入力(パターンのバインド変数名を定義)します。

    この値を使用して、単一のルールで同じタイプの複数のインスタンスをテストできます。たとえば、パターンのバインド変数を使用すると、driver1.age > driver2.ageなどの比較で、指定した名前を使用して、ある運転者と他の運転者との一致を比較できます。

  4. 3番目のボックスには、<make a choice>というテキストが表示されます。このボックスには、データ・モデルから使用可能なファクト・タイプが表示されます。このボックスで、DriverData(ファクト・タイプの別名をデータ・モデルに定義していない場合はcarrental.Driver)を選択します。

  5. 「OK」をクリックし、パターン定義を保存して「ルール」ページに戻ります。

  6. 「ルール」ページで「OK」をクリックし、ルールを保存します。


    注意:

    パターンの変更内容は、「ルール」ページで「OK」または「適用」をクリックするまで、ルールには追加されません。「OK」または「適用」をクリックせずに別のルールセットにナビゲートしたり、異なるタブを選択すると、パターン定義は破棄されます。 


  7. ディクショナリを保存します。

パターンに対してテストが定義されていないと、定義するアクションはすべての運転者に適用されます。パターンにテストを定義するには、2.7.2.3項の説明に従って「パターン定義」ページを続行します。

関連項目:

「UnderAgeルールに対するアクションの追加」 

2.7.2.3 UnderAgeルールでのパターンに対するテストの定義

パターンに対してテストを追加する手順は、次のとおりです。

  1. 「ルールセット」タブのナビゲーション・ペインで、テストを追加するルールをクリックします。この例では、ナビゲーション・ペインでUnderAgeルールのノードをクリックします。「ルール」ページが表示されます。

  2. 「ルール」ページの「if」ボックスで、鉛筆アイコンをクリックして「パターン定義」ページを表示します。「パターン定義」ページには、「パターンの選択」「パターンのテストを定義」の2つの領域があります。


    画像の説明

  3. 「パターン定義」ページで、「標準テスト」ボタンを選択し、次に「作成」をクリックします(図2-16を参照)。詳細は、3.8.1項「「アドバンスト・テスト式」オプションの使用」を参照してください。

    図 2-16    Rule Authorのルールの「パターン定義」ページの「パターンのテストを定義」フィールド


    画像の説明

  4. 「オペランド」列で、最初の「フィールド」ボックスからdriver.DriverAge(このメンバー変数の別名をデータ・モデルに定義していない場合はdriver.age)を選択します。

  5. 「演算子」列で、<(より小さい)を選択します。

  6. 「オペランド」列で、「値」ボックスに21を入力します。「フィールド」ボックスには値を入力しません。

  7. 「値」ボックスと「フィールド」ボックスの横には、AnyFixedの固定値を備えたドロップダウン・リストがあります(図2-17を参照)。これらの値は制約と呼ばれ、カスタマイズを有効化または無効化します。Fixedを使用すると、フィールドは読取り専用になります。これにより、このフィールドはカスタマイズなしに指定されます。Anyを選択すると、Rule Authorで値を変更できることが指定されます(これにより、技術を持たないユーザーでも、「カスタマイズ」タブからフィールドに変更を加えることができます。)。

    「値」フィールドの制約としてAnyを選択します。

    図 2-17    UnderAgeルールの値が表示されたRule Authorの「パターン定義」ページ


    画像の説明

  8. 「OK」をクリックし、変更内容を保存して「ルール」ページに戻ります。

  9. 「ルール」ページで「OK」をクリックします。


    注意:

    パターンの変更内容は、「ルール」ページで「OK」または「適用」をクリックするまで、ルールには追加されません。「OK」または「適用」をクリックせずにルールセットにナビゲートしたり、異なるタブを選択すると、パターン定義は破棄されます。 


  10. ディクショナリを保存します。

パターンに対してテストを追加する際の注意点は、次のとおりです。

2.7.2.4 UnderAgeルールに対するアクションの追加

アクションはパターン一致と関連しています。ルールの「if」部が一致すると、Rules Engineによって「then」部がアクティブになり、ルールに関連するアクションの実行が準備されます。

ここでは、UnderAgeルールに対して2つのアクションを追加します。第1のアクションは結果の出力です。第2のアクションは、Rules Engineからの運転者ファクトの取消しです。次のような様々な理由で、ファクトの取消しが必要になることがあります。

UnderAgeルールの一致に関する結果を出力するアクションを追加する手順は、次のとおりです。

  1. 「ルールセット」タブをクリックします。

  2. ツリーで、vehicleRentフォルダの下のUnderAgeルールのノードをクリックします。

  3. 「ルール」ページで、「then」セクションの「新規アクション」をクリックします。「アクションの追加」ページが表示されます(図2-18を参照)。

    図 2-18    Rule Authorの「アクションの追加」ページ


    画像の説明

  4. 「アクション・タイプ」ボックスから、Call項目を選択します。「アクション・パラメータ」ボックスが表示されます。

  5. 「関数」リストからPrintOutput(この関数の別名を定義していない場合はDM.println)を選択します。「関数の引数」ボックスが開きます。

  6. 「関数の引数」ボックスの「引数の値」フィールドの「式」列に、値を入力します(図2-19を参照)。次に例を示します。

    "Rental declined " + driver.DriverName + " Underage,age is:" + driver.DriverAge
    


    注意1:

    Rule Authorでは、Javaに類似した構文を式に対して使用します。RL Languageは完全な式構文を定義します。 



    注意2:

    式に使用される変数名が不明な場合は、「ウィザード」フィールドで編集アイコンを使用して、式ウィザードを起動します。式を記述するための追加領域を備えたウィザード・ページが表示されます。このウィザード・ページには変数選択ボックスもあり、変数をより簡単かつ正確に入力することができます。 


    図 2-19    UnderAgeルールに関するRule Authorの「アクションの追加」ページ


    画像の説明

  7. 「OK」をクリックし、変更内容を保存して「ルール」ページに戻ります。

  8. 「ルール」ページで、「OK」をクリックします。

  9. ディクショナリを保存します。

次に、UnderAgeルールに対して取消しアクションを追加します。次の手順を実行し、この第2のアクションをルールに追加します。

  1. 「ルールセット」タブをクリックします。

  2. vehicleRentフォルダの下のUnderAgeルールのノードをクリックします。

  3. 「ルール」ページで、「then」ボックスから「新規アクション」をクリックします。「アクションの追加」ページが表示されます。

  4. 「アクション・タイプ」ボックスからRetractを選択します。「アクション・パラメータ」ボックスが表示されます。

  5. 「アクション・パラメータ」領域の「ファクト・インスタンス」リストから、driverを選択します。パターン名driverは、パターンが一致した単一のインスタンスを参照します。

  6. 「OK」をクリックし、変更内容を保存して「ルール」ページに戻ります。

  7. 「ルール」ページで、「OK」をクリックします(図2-20を参照)。


    注意:

    アクションの変更内容は、「ルール」ページで「OK」または「適用」をクリックするまで、ルールに追加されません。「OK」または「適用」をクリックせずにルールセットにナビゲートしたり、異なるタブを選択すると、Rule Authorによってアクション定義は破棄されます。 


  8. ディクショナリを保存します。

    図 2-20    Rule AuthorのUnderAgeルールのパターンとアクション


    画像の説明


    注意:

    アクションをルールに追加する場合、連続して追加できるのは新しいアクションのみです。あるアクションがそれ以前のアクションの結果に依存する場合は、アクションを追加する順序が重要になります。アクション・タイプの詳細は、表3-2を参照してください。 


    関連項目:

    『Oracle Business Rulesランゲージ・リファレンス』 

2.8 レンタカー・サンプルに対するルールのカスタマイズ

Rule Authorの「カスタマイズ」タブは、ビジネス・ユーザー用に設計されています。ルール開発者は、「ルールセット」タブから使用できる「パターン定義」ページの許可された値のフィールドを使用して、カスタマイズを許可するかどうかを指定します。カスタマイズが許可されている場合は、カスタマイズ可能なフィールドについて、有効な値の範囲を指定できます。その結果、ビジネス・ユーザーは「カスタマイズ」タブを使用して値を変更できます。

この例では、「カスタマイズ」タブで、運転者の年齢制限を変更するようにUnderAgeルールを変更できます(このサンプルでは、値に制限はなく、あらゆる指定値が有効です)。

「カスタマイズ」タブを使用してUnderAgeルールを変更する手順は、次のとおりです。

  1. 「カスタマイズ」タブをクリックします。ナビゲーション・ペインにはvehicleRentフォルダが表示され、その下に、後ろにアスタリスク(*)の付いたUnderAgeルールのノードが表示されています。このアスタリスクは、ルールがカスタマイズ可能なことを示しています。

  2. UnderAgeルールのノードをクリックします(図2-21を参照)。

    図 2-21    UnderAgeルールに関するRule Authorの「ルールのカスタマイズ」ページ


    画像の説明

  3. 「ルールのカスタマイズ」ページの「パターンのカスタマイズ」ボックスには、driver.DriverAge < 21のテストを編集できるテキスト入力フィールドがあります。

    このフィールドで、値2119に変更します。

  4. 「適用」をクリックします。

  5. ディクショナリを保存します。

ディクショナリを保存すると、Java版How-Toに対するデータ・モデルとルールの作成は終了となります。

関連項目:

許可された値のフィールドの詳細は、「UnderAgeルールでのパターンに対するテストの定義」を参照してください。 

2.9 Oracle Business Rulesを使用したJavaアプリケーションの作成

データ・モデルおよびルール指定したルールセットが格納されているディクショナリを作成および保存した後は、ルール対応Javaアプリケーションでディクショナリを使用できます。この項では、ルール対応Javaアプリケーションを作成する手順を示します。


注意:

Javaコールは必ずtry/catchブロックにラップされるようにしてください。 


内容は次のとおりです。

このサンプル・アプリケーションの完全なコードは、$HowToDir/src/carrentalディレクトリのTestMain.javaを参照してください。$HowToDirには、Java版How-Toをインストールしたディレクトリが入ります。


注意:

この章に前述されている項の説明に従うことで、WebDAVリポジトリおよびCarRentalというディクショナリが作成および保存されています。How-Toサンプル・コードで提供されているレンタカーの例でも、CarRentalという名前のディクショナリが格納されているファイル・リポジトリを使用します。この章で作成したWebDAVリポジトリと、How-Toサンプルのファイル・リポジトリのディクショナリ内容は同じです。

How-Toサンプルのコードには、WebDAVリポジトリとファイル・リポジトリの両方のコードが含まれていますが、ファイル・リポジトリのみが詳細に説明されています。How-Toサンプルでは、移植性の観点からファイル・リポジトリを使用していますが、前述の項で作成したWebDAVリポジトリを使用するように変更できます。 


2.9.1 Rules SDKおよびRules RL Languageクラスのインポート

ルール対応プログラムを記述する最初の手順は、必要なクラスのインポートです。例2-1に、レンタカー・サンプルのためのTestMain.javaアプリケーションからのインポートを示します。

例 2-1    Rules SDKでのレンタカー・サンプルに必要なインポート

import java.util.Date;

import oracle.rules.sdk.ruleset.RuleSet;
import oracle.rules.sdk.repository.RuleRepository;
import oracle.rules.sdk.repository.RepositoryManager;
import oracle.rules.sdk.repository.RepositoryType;
import oracle.rules.sdk.repository.RepositoryContext;
import oracle.rules.sdk.dictionary.RuleDictionary;
import oracle.rules.sdk.exception.RepositoryException;
import oracle.rules.sdk.store.jar.Keys;

import oracle.rules.rl.RuleSession;

import carrental.Driver;

2.9.2 Rules SDKでのリポジトリの初期化

ルール対応Javaアプリケーションを作成する場合は、次の手順を実行し、ディクショナリにアクセスしてルールセットを指定します(例2-2を参照)。

  1. リポジトリのパスが指定されているStringを作成します。

  2. Rules SDKのRuleTypeオブジェクトを使用して、RepositoryManager.getRegisteredRepositoryTypeメソッドから取得するリポジトリを保持します。例2-2 は、ファイル・タイプ・リポジトリを示しています。

  3. リポジトリ・マネージャcreateRuleRepositoryInstanceメソッドを使用してリポジトリ・インスタンスを作成します。

  4. RepositoryContextを定義し、適切なプロパティを設定します。ファイル・リポジトリの場合は、例2-2repoPathパラメータに伴って記載されているように、リポジトリのパスを指定します。

  5. RuleRepositoryオブジェクトrepoinitメソッドを使用して、リポジトリ・インスタンスを初期化します。

    例 2-2    Rules SDKでのディクショナリのロード

    String fs = "/";
    String repoPath = "dict" + fs + "CarRepository";
    
    RepositoryType jarType = 
         RepositoryManager.getRegisteredRepositoryType( Keys.CONNECTION );
    
    RuleRepository repo = RepositoryManager.createRuleRepositoryInstance( jarType );
    
    //fill in initialization property values
    RepositoryContext jarCtx = new RepositoryContext();
    jarCtx.setProperty( oracle.rules.sdk.store.jar.Keys.PATH, repoPath );
    
    //initialize the repository instance.  
    repo.init( jarCtx );
    
    

例2-2のように、ファイル・リポジトリではなくWebDAVリポジトリをロードする場合は、getWebDAVRepositoryメソッドを使用してください。コメントには、HowToDir/src/carrentalディレクトリのTestMain.javaが含まれます。$HowToDirには、Java版How-Toをインストールしたディレクトリが入ります。

2.9.3 Rules SDKでのディクショナリのロード

ルールを使用するJavaアプリケーションを作成する場合は、指定されたバージョンのディクショナリをロードする必要があります。例2-3のように、RuleDictionaryオブジェクトを使用してディクショナリをロードします。この例では、CarRentalディクショナリをHowToバージョンでdictという名前のオブジェクトにロードします。CarRentalディクショナリが、リポジトリで使用可能である必要があります。バージョン名HowToCarRentalディクショナリは、以前にRule Authorを使用して作成されています。

例 2-3    Rules SDKでのディクショナリのロード

RuleDictionary dict = repo.loadDictionary( "CarRental", "HowTo" );

2.9.4 ルールセットの指定とRules SDKでのRL Languageの生成

ディクショナリをロードした後は、ルールセットを指定し、Rules SDKを使用してRL Languageプログラムを生成する必要があります。この手順は、ディクショナリが中間XML形式を使用してデータ・モデルとルールを格納するために必要です。Rules SDKには、ルールにアクセスするためのメソッドと関連するデータ・モデルがあります。Rules SDKは、中間XML形式からのマッピングを実行して、Rules Engineで動作するRL Languageプログラムを作成します。

Rule Authorでは、各ルールセットには2つのコンポーネント(ディクショナリのルールセットすべてに適用されるグローバルなデータ・モデルと、ルールセットに関連付けられている一連のルール)が挿入されます。例2-4に、これら2つのコンポーネントについてRL Languageを生成するコードを示します。

例 2-4    Rules SDKでのOracle Business Rules Rule Languageの生成

//init a rule session
String rsname = "vehicleRent";
String dmrl = dict.dataModelRL();
String rsrl = dict.ruleSetRL( rsname );

2.9.5 ルール・セッションの初期化および実行

ルールとデータ・モデルが挿入されているRL Languageプログラムを生成すると、いつでもルール・セッションで作業できる状態になります。ルール・セッションは、Rules Engineを初期化し、多数のルール実行にわたってRules Engineの状態を保守します。RuleSessionオブジェクトは、アプリケーションとRules Engineとの間のインタフェースです。

例2-5に、RuleSessionオブジェクトを作成し、RL Languageプログラムを実行するコードを示します。

executeRuleset()メソッドは、文字列として渡されたRL Languageプログラムを実行します。このメソッドは、指定のRL Languageプログラムの解析をRules Engineに指示します。


注意:

executeRuleset()コールの順序は重要です。ルールセットのRL Languageプログラムを実行する前に、データ・モデルのRL Languageプログラムを実行する必要があります。データ・モデルには、関連するルールセットを実行するときに必要なグローバル情報が格納されます。 


例 2-5    Rules SDKでのルール・セッションの初期化および実行

RuleSession session = new RuleSession();
session.executeRuleset( dmrl );
session.executeRuleset( rsrl );

session.callFunction( "reset" );        
session.callFunction( "clearRulesetStack" );
session.callFunctionWithArgument( "pushRuleset", rsname );

データ・モデルとルールセットがロードされると、ルール・セッションは、そのルール・セッション用にアサートするファクトに対していつでも指定のルールセットを実行できる状態になります。

2.9.6 ルール・セッション内のビジネス・オブジェクトのアサート

ルール・セッションを実行する前に、通常はいくつかのファクトをアサートします。ルール・セッションでデータ・モデルを実行する場合は、新しいファクトをアサートするルール・セッションを準備します。ファクトをアサートするには、session.callFunctionWithArgument()メソッドと、ファクトを引数として提供するassert関数を使用します。

例2-6に、レンタカー・サンプルのDriverオブジェクトを準備して、3つのファクトをアサートするサンプル・コードを示します。

例 2-6    レンタカー・サンプルに対する運転者および事故記録の準備

// Date Function
static public Date getDate(String dateStr ) {
  Date result = null;
  try {
    java.text.SimpleDateFormat sdf =
      new java.text.SimpleDateFormat( "MM/DD/YYYY" );
    result = sdf.parse( dateStr );
  }
  catch( Throwable t) { t.printStackTrace(); }
  return result;
}

// Driver d1 record
Date d1LicIssueDate = getDate( "10/1/1969" );
Driver d1 = new Driver( "d111", "Dave", 50, "sports", "full", 
                        d1LicIssueDate, 0, 1, true );

// Driver d2 record
Date d2LicIssueDate = getDate( "8/1/2004" );
Driver d2 = new Driver( "d222", "Qun", 15, "truck", "provisional",
                        d2LicIssueDate, 0, 0, true );

//Driver d3 record
Date d3LicIssueDate = getDate( "6/1/2004" );
Driver d3 = new Driver( "d333", "Lance", 44, "motorcycle", "full",
                        d3LicIssueDate, 0, 1, true );

session.callFunctionWithArgument( "assert", d1 );
session.callFunctionWithArgument( "assert", d2 );
session.callFunctionWithArgument( "assert", d3 );

2.9.7 ルール・セッションでの実行関数の使用

例2-7に、ルール・セッションを実行するコードを示します。

例 2-7    実行関数を使用したルール・セッションの実行

session.callFunction( "run");

2.10 テスト・プログラムを使用したレンタカー・サンプルの実行

$HowToDir/libディレクトリには、TestMain.jarが格納されています。これは、CarRentalディクショナリを使用するOracle Business RulesJavaアプリケーションで、ただちに実行できます。ディクショナリ名を変更した場合は、TestMain.javaを変更する必要があります(ソースはディレクトリ$HowToDir/srcにあります。HowToDirには、Java版How-Toをインストールしたディレクトリが入ります)。

例2-8に、TestMain内でアサートされたファクトを使用して実行しているTestMainからの出力を示します。


注意:

$HowToDir/docsディレクトリのReadme.htmlファイルには、テスト・プログラムの実行に必要な環境変数の設定について指示が記載されています。 


例 2-8    レンタカー・プログラムの実行サンプル

java carrental.TestMain
Rental declined Qun Under age: age is: 15

すべてのファクトがルールにマッチして出力を生成するわけではないことに注意してください。この例は、UnderAgeルールに一致する、アサートされたファクトである運転者に関する出力を示しています。


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

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