Oracle Business Rulesでは、データ・モデルはファクト・タイプ、関数、グローバル、バケット・セット、デシジョン関数およびディクショナリ・リンクで構成されています。
この章の内容は次のとおりです。
詳細は、第1.1.8項「ディクショナリとは」を参照してください。
Oracle Business Rulesアプリケーションのデータ・モデル部分を実装するには、ディクショナリを作成し、データ・モデル要素を追加します。 ディクショナリを完成するには、これらのデータ・モデル要素を使用するか、要素に依存するルールを含むルールセットを1つ以上作成します。
詳細は、次を参照してください。
ディクショナリは、ファクト、関数、グローバル、バケット・セット、リンク、デシジョン関数およびルールセットに使用するOracle Business Rulesコンテナです。 また、アプリケーションのルールセットおよびデータ・モデルが格納されているXMLファイルです。 ディクショナリは他のディクショナリにリンクできます。必要な数のディクショナリを作成できます。1つのディクショナリに多数のルールセットを含めることができます。 Oracle Business Rulesを使用する場合、データ・モデルは1つ以上のディクショナリに格納されます。 ルールセットで参照されるデータ・モデル要素はすべて、ディクショナリ内で使用可能である必要があります。
ディクショナリは、*.rules
ファイルに格納されます。
各Oracle Business Rulesディクショナリには、他のディクショナリへのリンクが含まれています。 作成した各ディクショナリには、組込みディクショナリも含まれています。つまり、ディクショナリにはすべてのOracle Business Rulesアプリケーションが必要とする標準的な関数および型が含まれています。 メイン・ディクショナリに加えて、PurchaseItems.rules
のようにアプリケーション固有のディクショナリを1つ以上作成します。これらのディクショナリのプロパティは読取りおよび書込み可能です。
ディクショナリにより定義された完全なデータ・モデルとそのリンク先ディクショナリは、結合ディクショナリと呼ばれます。同じディクショナリへのリンクを複数作成できます。この場合、2つ目以降のリンクはすべて無視されます。
詳細は、第2.2.8項「ディクショナリ・リンクに関する必須情報」を参照してください。
Oracle Jdeveloperでは、数多くの方法でOracle Business Rulesのディクショナリを作成できます。 .ここでは、SOAプロジェクトでディクショナリを作成できる方法の1つを示します。 SOAアプリケーションで使用するディクショナリを作成できます。
典型的なSOAコンポジットのデザイン・パターンでは、各アプリケーションに専用ディクショナリを用意します。様々なアプリケーションが共通データ・モデルの同一部分へのアクセスを必要とする場合は、ディクショナリ・リンクを使用して、ターゲット・アプリケーションのディクショナリをソース・アプリケーションのディクショナリに組み込むことができます。 これにより、ターゲット・アプリケーションのディクショナリがソース・アプリケーションにコピーされます。 したがって、リンクを含むディクショナリで作業する場合、リンク先のコンテンツはローカル・コンテンツとして参照されます。
SOAアプリケーションの外部で、ビジネス層に使用するディクショナリを作成することもできます。 詳細は、第9.2.4項「Gradesプロジェクト内でのOracle Business Rulesディクショナリの作成方法」を参照してください。
Rules Designerを使用してSOA層にディクショナリを作成する手順は、次のとおりです。
「アプリケーション・ナビゲータ」で、SOAプロジェクトを選択または作成します。
右クリックしてドロップダウン・リストから「新規」を選択します。
図2-1に示すように、「新規ギャラリ」で、「現在のプロジェクト・テクノロジ」タブを選択して「カテゴリ」領域で「SOA層」を開きます。
「新規ギャラリ」ウィンドウの「項目」領域で、「ビジネス・ルール」を選択します。
「OK」をクリックします。「ビジネス・ルールの作成」ダイアログが表示されます。
図2-2に示すように、「ビジネス・ルールの作成」ダイアログで次のフィールドに入力します。
「名前」フィールドにディクショナリ名を入力します。 たとえば、PurchaseItems
と入力します。
「パッケージ」フィールドに、ディクショナリが属するJavaパッケージを入力します。たとえば、com.example
と入力します。
入力および出力を指定する手順は、次のとおりです。
「追加」アイコンをクリックし、入力を作成するには「入力」を、出力を作成するには「出力」を選択します。
「タイプ・チューザ」ダイアログで、適切なXSDを開いて適切なタイプを選択します。
「OK」をクリックして「タイプ・チューザ」ダイアログを閉じます。
入力および出力を後で追加したり、削除できます。詳細は、第6章「デシジョン関数の使用」を参照してください。
「ビジネス・ルールの作成」ダイアログで「OK」をクリックして、デシジョン・コンポーネントおよびOracle Business Rulesディクショナリを作成します。
図2-3に示すように、Oracle JDeveloperによって、拡張子.rules
が付いたディクショナリがファイル内に作成され、Rules Designerが起動します。
図2-3 Oracle Business RulesディクショナリPurchaseItemsの新規作成
Oracle JDeveloperによって、composite.xml内にデシジョン・コンポーネントも作成されます。このコンポーネントを表示するには、図2-4に示すようにcomposite.xml
ファイルをダブルクリックします。
ルール・ディクショナリを作成する最も単純な方法は、Rules Designerを使用することです。 SOAアプリケーションの外部で、ビジネス層に使用するディクショナリを作成できます。 SOAなしでOracle Business Rulesを使用する方法については、第9章「ルール対応の非SOA Java EEアプリケーションの作成」を参照してください。
「ディクショナリ設定」アイコンを使用して、ディクショナリ設定を表示および編集できます。
ディクショナリ別名を変更する手順は、次のとおりです。
Oracle JDeveloperで、Oracle Business Rulesディクショナリを選択します。
Rules Designerで、「ディクショナリ設定」アイコンをクリックします。
「ディクショナリ設定」ダイアログの「エイリアス」フィールドで、別名を必要な名前に変更します。 図2-5に、このフィールドを示します。
「OK」をクリックします。
「アプリケーション・ナビゲータ」で、ディクショナリまたはディクショナリ・パッケージの名前を変更できます。この名前の変更操作によって、ディクショナリの名前は変更されますが、別名は変更されません。 「ディクショナリ設定」ダイアログで別名を変更します。 通常、これらは同じ値に設定する必要があります。詳細は、第2.2.4項「ディクショナリ設定の表示および編集方法」を参照してください。
ディクショナリ・パッケージの名前を変更する手順は、次のとおりです。
図2-6に示すように、Oracle JDeveloperの「アプリケーション・ナビゲータ」でディクショナリを選択します。
ディクショナリが開いている場合は、ディクショナリ名を示すタブを選択し、「閉じる」アイコンをクリックしてディクショナリを閉じます。
「アプリケーション・ナビゲータ」で、ディクショナリ名を選択します。
「ファイル」メニューから「名前の変更」を選択します。 図2-7に示すように、「Oracle Business Rulesディクショナリの名前変更」ダイアログが表示されます。
ディクショナリの名前を変更するには、「名前」フィールドに名前を入力します。
ディクショナリ・パッケージの名前を変更するには、「パッケージ」フィールドに名前を入力します。
「OK」をクリックします。
Rules Designerの「リンク」ナビゲーション・タブを使用して、同じアプリケーションまたは別のアプリケーション内のディクショナリにリンクできます。 別のディクショナリにリンクするには、他のディクショナリが1つ以上使用可能である必要があります。
リソース・ピッカーを使用してディクショナリにリンクする手順は、次のとおりです。
図2-8に示すように、Rules Designerで「リンク」ナビゲーション・タブをクリックします。
「リンク」領域で、「作成」アイコンをクリックし、ドロップダウン・リストから「リソース・ピッカー」を選択します。 「SOAリソース・ブラウザ」ダイアログが表示されます。
図2-9に示すように、「SOAリソース・ブラウザ」ダイアログで、リンクするディクショナリにナビゲートして選択します。
「OK」をクリックします。
ADF Business Componentsのファクトを使用する場合は、デシジョン・ポイント・ディクショナリへのリンクを作成する必要があります。詳細は、第10章「Oracle Business RulesとADF Business Componentsの使用」を参照してください。
デシジョン・ポイント・ディクショナリにリンクする手順は、次のとおりです。
Rules Designerで、「リンク」ナビゲーション・タブをクリックします。
「リンク」領域で、「作成」をクリックし、ドロップダウン・リストから「デシジョン・ポイント・ディクショナリ」を選択します。 この操作には少し時間がかかります。 デシジョン・ポイント・ディクショナリがロードされるまで待機する必要があります。
あるディクショナリ(Project_rules1など)が別のディクショナリ(Shared_rulesなど)にリンクしている場合は、各ディクショナリに加えられたすべての変更内容を両方のディクショナリで確認する必要があります。 Rules Designerを使用して、Shared_rulesディクショナリを変更し、Project1_rules1ディクショナリを更新することでその変更内容をProject1_rules1で確認できます。または、Rules Designerを閉じてから再度開くことができます。
リンク先ディクショナリを更新する手順は、次のとおりです。
サンプル・ディクショナリ名を使用し、「保存」アイコンをクリックしてShared_rulesディクショナリを保存します。
Project_rules1ディクショナリを選択します。
「リンク」ナビゲーション・タブを選択します。
「ディクショナリ・キャッシュ」アイコンをクリックします。
「ディクショナリ・ファインダ・キャッシュ」ダイアログで、適切なリンク先ディクショナリを選択します。
「クリア」アイコンをクリックします。
「ディクショナリ・ファインダ・キャッシュ」ダイアログで、「閉じる」をクリックします。
「検証」アイコンをクリックします。
他のディクショナリへのリンクを含むディクショナリを使用すると、次の場合に役立ちます。
データ・モデルの共有。プロジェクト内のデータ・モデルの一部を共有します。 別のプロジェクト内のディクショナリにリンクした場合は、そのデータ・モデル部分がローカル・プロジェクトにコピーされます。
たとえば、一部のOracle Business Rules関数を共有するプロジェクトを考えてみます。関数を含むディクショナリを作成し、ディクショナリ名としてDictCommon
を指定できます。 これでDictApp1
およびDictApp2
を作成できます。この2つのディクショナリは、どちらもDictCommon
にリンクし、同じOracle Business Rules関数を使用できます。 関数の1つを変更する必要がある場合は、単にDictCommon
でバージョンを変更します。 これにより、次回、DictApp1
またはDictApp2
からRL Languageが生成される際には、どちらのディクショナリでも更新済の関数が使用されます。
Oracle Business Rulesでは、完全修飾されたディクショナリ名はDictionaryFQNと呼ばれ、次の2つの要素で構成されています。
ディクショナリ・パッケージ: パッケージ名
ディクショナリ名: ディクショナリ名
ディクショナリは、DictionaryFQNおよび別名を使用してリンク先ディクショナリを参照します。Oracle Business Rulesでは、DictionaryFQNを使用してリンク先ディクショナリが検索されます。
結合ディクショナリに関する次のネーミング制約に注意してください。
結合ディクショナリ内では、パッケージ名とディクショナリ名を含む個別の完全ディクショナリ名を使用する必要があります。また、ディクショナリ別名も個別にする必要があります。
Oracle Business Rulesでは、特定の種類のデータ・モデル定義(関数、Oracle RLクラスまたはバケット・セットなど)の別名が、ディクショナリ内で一意である必要があります。
結合ディクショナリ内では、直接含んでいるディクショナリの別名で定義を修飾できます。最上位およびメイン・ディクショナリ内の定義を修飾する必要はありません。他のディクショナリ内の定義は、修飾する必要があります。
ルールセット名は、ディクショナリ内で一意である必要があります。ルールセット用のRL Languageの生成時には、ディクショナリ別名は生成された名前の一部として使用されません。たとえば、dict1のディクショナリをdict2にリンクして結合ディクショナリを作成する場合、dict1にはrule_1を含むruleset_1が格納されており、dict2にはruleset_1が格納されているが、dict2のruleset_1にはrule_2が含まれているとします。この場合、結合ディクショナリでは、この2つのルールrule_1とrule_2がどちらも同じルールセット(ruleset_1)に含まれることになります。
すべてのルールおよびデシジョン表には、ルールセット内で一意の名前が必要です。
たとえば、ディクショナリd1とディクショナリd2を含む結合ディクショナリ内で、ディクショナリd1にルールrule_1を含むルールセットRuleset_1
があるとします。ディクショナリd2にもrule_2を含むルールセットRuleset_1
がある場合、Oracle Business Rulesによってリンク済結合ディクショナリからRL Languageが生成されると、両方のルールrule_1およびrule_2が単一のルールセットRuleset_1
に含まれます。 このネーミング規則に違反し、結合ディクショナリ内の単一ルールセットのルールに個別の名前を使用しなかった場合は、Rules Designerによって、次のような検証警告が表示されます。
RUL-05920: Rule Set Ruleset_1 has two Rules with name rule_1
詳細は、付録A「Oracle Business Rulesのファイルと制限事項」を参照してください。
リソース・ピッカーを使用してディクショナリ・リンクを作成すると、ディクショナリはソース・プロジェクト(リンク元のディクショナリが常駐しているプロジェクト)にコピーされます。 つまり、このタイプのリンクでは、ディクショナリのローカル・コピーがプロジェクトに作成されます。 これは、ターゲット・ディクショナリの場所に関係なく、元のターゲットへのリンクではありません。 つまり、リソース・ピッカーを使用してリンクを作成した場合、Rules Designerではリンクにコピー操作が使用されます。
Rules Designerを使用している場合、デプロイされたコンポジット・アプリケーションおよび関連するOracle Business RulesディクショナリをMDS接続で参照できます。 ただし、MDSにデプロイされたディクショナリにディクショナリ・リンクを作成することはできません。
Rules Designerを使用してOracle Business Rulesグローバルを追加できます。
Oracle Business Rulesで使用するグローバルは、Javaにおけるパブリックな静的変数に類似しています。 グローバルは、定数または変更可能に指定できます。
グローバルの定義を使用すると、複数のルールと関数で情報を共有できます。 たとえば、複数のルールで10%割引を使用する場合は、グローバルGold Discountを作成し、このグローバルを使用してすべてのルールに適切な割引を適用できます。
グローバルの定義を使用すると、プログラムをモジュール化して保守を容易にできます。
Rules Designerを使用して、グローバルを追加できます。
グローバルを追加する手順は、次のとおりです。
Rules Designerで、「グローバル」ナビゲーション・タブを選択します。
グローバル表で「作成」アイコンをクリックします。 これにより、グローバルが追加され、図2-10に示すように、「グローバルの編集 -」ダイアログが表示されます。
「名前」フィールドに名前を入力するか、またはデフォルト値を使用します。
「型」フィールドのドロップダウン・リストから型を選択します。
「バケットセット」フィールドで、ドロップダウン・リストから値を選択することもできます。
「値」フィールドで、値を入力するか、ドロップダウン・リストから値を選択するか、「式ビルダー」アイコンをクリックして式を入力します。 詳細は、第4.10項「式ビルダーの使用」を参照してください。
グローバルが定数である場合は、「定数」チェック・ボックスを選択します。 このオプションを選択することは、グローバルが定数値であることを示します。 詳細は、第2.3.3項「ファイナルオプションと定数オプションに関する必須情報」を参照してください。
グローバルがファイナルでない場合は、「ファイナル」チェック・ボックスの選択を解除します。 このオプションの選択を解除することは、Assignアクションなどで、グローバルを変更可能にすることを意味します。
Rules Designerを使用して、グローバルを編集できます。
グローバルを編集する手順は、次のとおりです。
Rules Designerで、「グローバル」ナビゲーション・タブを選択します。
グローバル表の行内のグローバル・アイコンをダブルクリックします。 行内のグローバル・アイコンをダブルクリックすると、図2-11に示すように、「グローバルの編集 - グローバル名」ウィンドウが表示されます。 このウィンドウで、グローバルを編集し、「ファイナル」フィールドや「定数」フィールド(グローバルをダブルクリックして「グローバルの編集 -」ダイアログを表示した場合は、「定数」フィールドのみ表示)などのフィールド値を変更できます。
「グローバルの編集 -」ダイアログには、グローバルに対して選択可能な「定数」チェック・ボックスと「ファイナル」チェック・ボックスが表示されます。
グローバルを使用する場合は、次のことに注意してください。
「ファイナル」の選択を解除することは、Assignアクションなどで、グローバルを変更可能にすることを意味します。
「ファイナル」を選択することは、ルール内のテストでグローバルを使用できることを示します(ファイナルでないグローバルはルール内のテストで使用できません)。
「ファイナル」を選択することは、グローバルが実行時に1度初期化され、変更できないことを示します。
「グローバルの編集 -」ダイアログで「定数」オプションを選択することは、グローバルが定数であることを示します。 Oracle Business Rulesでは、定数は、文字列や数値リテラル、値が定数であるファイナル・グローバル、または定数と+
、-
、*
および/
を含む単純な式です。
グローバルに対して「定数」オプションを選択すると、次の3つの影響があります。
文字列リテラルを二重引用符で囲む必要がありません。
式の値の選択リストに定数のみが表示されます。
式の値が有効な定数である必要があります。
「定数」オプションは、必要に応じて選択できます。 バケット値、バケット範囲のエンドポイントおよびルールセット・フィルタの値は、常に定数であることに注意してください。
データ・モデルにはデシジョン関数が含まれています。 デシジョン関数の使用については、第6.1項「デシジョン関数の概要」を参照してください。
Oracle Business Rulesには、ルール作成時の複雑さを隠すための関数が用意されています。 Oracle Business Rulesでは、組込み関数またはユーザー定義関数をルールおよびデシジョン表の条件およびアクションに使用できます。
Oracle Business Rulesでは、Javaメソッドに類似する方法で関数を定義しますが、Oracle Business Rules関数はクラスに属しません。 Javaアプリケーション・オブジェクト・モデルはOracle Business Rules関数を使用して拡張できるため、ユーザーは、元のJavaアプリケーション・コードを変更せずに、複数の操作をルールで実行できます。
Oracle Business Rules関数は、ルールまたはデシジョン表に関連付けられている条件またはアクションに使用できます。
また、Oracle Business Rules関数定義を使用して、同じまたは類似した式を複数のルール間で共有し、結果をアプリケーションに戻すこともできます。
Oracle Business Rules関数には、次の項目が含まれています。
名前: Oracle Business Rules関数名。
戻り型: Oracle Business Rules関数の戻り型、または戻り値がない場合はvoid。
バケット・セット: Oracle Business Rules関数に関連付けるバケット・セット。
引数: 関数の引数。各関数の引数には名前および型があります。
関数本体: 事前定義済アクションを含む関数本体。 事前定義済アクションを使用すると、Rules DesignerではOracle Business Rules関数の書式が適切で検証可能であることが保証されます。
Rules Designer内で関数を使用してルールをテストすることもできます。詳細は、第8.1.1項「Rules Designerでテスト関数を使用してルールをテストする方法」を参照してください。
Rules Designerを使用して、Oracle Business Rules関数を追加します。
Oracle Business Rules関数を追加する手順は、次のとおりです。
Rules Designerで、「関数」ナビゲーション・タブを選択します。
「作成」アイコンを選択します。
「名前」フィールドに関数名を入力するか、デフォルト名を使用します。
「戻り型」のドロップダウン・リストから戻り型を選択します。たとえば、「void
」を選択します。
「バケットセット」フィールドのドロップダウン・リストから、関数の戻り型に関連付けるバケット・セットを選択することもできます。
必要に応じて、「説明」フィールドに説明を入力します。
「引数」表で「追加」をクリックし、関数の引数を1つ以上追加します。
引数ごとに、「型」フィールドのドロップダウン・リストから型を選択します。
「バケットセット」フィールドの各引数に関して、バケット・セット制約で指定した引数値に制限するために、ドロップダウン・リストからバケット・セットを選択します。
「本体」領域に、関数本体のアクションと引数を入力します。 図2-12に示す例を参照してください。