E Oracle Business RulesとJSR-94実行セットの使用
Java SEまたはJava EEクライアントからルール・エンジンにアクセスするための標準JavaランタイムAPIを定義するJava Rule Engine API (JSR-94)の仕様の概要。
詳細は、次を参照してください。
E.1 Oracle Business RulesとJSR-94ルール実行セットの概要
Oracle Business Rulesには、JSR-94サポート機能が用意されています。このため、より移植性の高いルール対応アプリケーションを作成できます。
Oracle Business RulesルールセットからJSR-94実行セットを作成し、これらの実行セットからJSR-94ルール・セッションを作成できます。詳細は、「Oracle Business RulesルールセットからのJSR-94ルール実行セットの作成」を参照してください。
Oracle Business Rulesルールセットにアクセスし、JSR-94 APIを使用してOracle Business Rules Engineに対して実行できます。詳細は、「JSR-94インタフェースをOracle Business Rulesとともに使用」を参照してください。
Oracle Business Rulesには、便利なJSR-94 APIの拡張機能も用意されています。詳細は、「Oracle Business RulesのJSR-94拡張機能の使用」を参照してください。
E.2 Oracle Business RulesルールセットからのJSR-94ルール実行セットの作成
JSR-94をRL Languageテキストでルールとともに使用するには、ルールをJSR-94ルール実行セットにマップする必要があります。
JSR-94ルール実行セット(ルール実行セット)は、一緒に実行されることを前提としたルールのコレクションです。ルール実行セットは、実行する前に登録する必要もあります。登録によってルール実行セットがURIと関連付けられ、そのURIを使用して、JSR-94ルール・セッションを作成できます。
ノート:
Oracle Business Rulesでは、JSR-94実行セットの登録は永続的ではありません。したがって、ルール実行セットは、JSR-94 RuleExecutionSetProvider
インタフェースを使用し、プログラム上で登録する必要があります。
詳細は、「createRuleExecutionSetを使用したルール実行セットの作成」を参照してください。
E.2.1 Oracle Business RulesのRL Languageテキストからのルール実行セットの作成
JSR-94を、テキストとして保存されたRL言語ルールセットとともに使用できます。この場合、Oracle RLテキストはルール実行セットに直接含められます。RL言語テキストを含める際に使用できるJSR-94拡張機能の詳細は、「拡張されたcreateRuleExecutionSetを使用したルール実行セットの作成」を参照してください。
Oracle Business RulesのOracle RL Languageテキストからルール実行セットを作成するには:
-
RL Languageのマッピング情報をXML文書に指定します。表E-1に、ルール実行セットの作成に必要なマッピング要素を示します。次の例には、RL LanguageテキストをJSR-94ルール実行セットにマッピングするためのサンプルのXML文書を示します。
<rule-execution-set xmlns="http://xmlns.oracle.com/rules/jsr94/configuration" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"> <name>CarRentalDemo</name> <description>The Car Rental Demo</description> <rule-source> <rl-text> ruleset DM { fact class carrental.Driver { hide property ableToDrive, driverLicNum, licIssueDate, licenceType, llicIssueDate, numPreAccidents, numPreConvictions, numYearsSinceLicIssued, vehicleType; }; final String DeclineMessage = "Rental declined "; public class Decision supports xpath { public String driverName; public String type; public String message; } function assertXPath(String package, java.lang.Object element, String xpath) { //RL literal statement main.assertXPath( package, element, xpath ); } function println(String message) { //RL literal statement main.println(message); } function showDecision(DM.Decision decision) { //RL literal statement DM.println( "Rental decision is " + decision.type + " for driver " + decision.driverName + " for reason " + decision.message); } } </rl-text> </rule-source> <rule-source> <rl-text> ruleset vehicleRent { rule UnderAge { priority = 0; if ((fact carrental.Driver v0_Driver && (v0_Driver.age < 19))) { DM.println( "Rental declined: " + v0_Driver.name + " Under age, age is: " + v0_Driver.age); retract(v0_Driver); } } } </rl-text> </rule-source> <ruleset-stack> <ruleset-name>vehicleRent</ruleset-name> </ruleset-stack> </rule-execution-set>
-
次に、このXML文書をJSR-94管理APIで使用して、ルール実行セットを作成します。作成したルール実行セットは、
RuleAdministration
インスタンスを使用して、JSR-94ランタイムに登録されます。表E-1 JSR-94のOracle Business RulesのOracle RL LanguageテキストXMLマッピング要素
要素 説明 <rule-source>
Oracle Business Rulesルールセットを含む明示的なRL言語テキストを含む
<rl-text>
タグが含まれます。複数の<rule-source>
タグを使用して、複数のルールセット指定できます(解析順に指定)。<ruleset-stack>
初期ルールセット・スタックを構成するルールセットのリストを指定します。リストに指定するルールセットの順序は、スタックの最上位から最下位です。
ノート:
<rl-text>
要素に、事前定義済のXMLエンティティを含めることはできません。これには、「&」、「>」、「<」、「"」および「\」の各文字が含まれます。
E.2.2 URLで指定したOracle RLテキストからのルール実行セットの作成
JSR-94は、URLを使用して指定したOracle RLルールセットとともに使用できます。URLを指定する際に使用できるJSR-94拡張機能の詳細は、「拡張されたcreateRuleExecutionSetを使用したルール実行セットの作成」を参照してください。
URLで指定したOracle RLテキストからルール実行セットを作成するには:
-
Oracle RLのマッピング情報をXML文書に指定します。表E-2に、ルール実行セットの作成に必要なマッピング要素を示します。次の例には、Oracle RLテキストをJSR-94ルール実行セットにマッピングするためのサンプルのXML文書を示します。
<?xml version="1.0" encoding="UTF-8"?> <rule-execution-set xmlns="http://xmlns.oracle.com/rules/jsr94/configuration" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"> <name>CarRentalDemo</name> <description>The Car Rental Demo</description> <rule-source> <rl-url> file:rl/DM.r1 </rl-url> </rule-source> <rule-source> <rl-url> file:r1/VehicleRent.r1 </rl-url> </rule-source> <ruleset-stack> <ruleset-name>vehicleRent</ruleset-name> </ruleset-stack> </rule-execution-set>
-
次に、このXML文書をJSR-94管理APIで使用して、ルール実行セットを作成します。作成したルール実行セットは、
RuleAdministration
インスタンスを使用して、JSR-94ランタイムに登録されます。表E-2 JSR-94のOracle Business RulesのOracle RL URL XMLマッピング要素
要素 説明 <rule-source>
RL言語テキストの場所を指定するURLを含む
<rl-url>
タグが含まれます。複数の<rule-source>
タグを使用して、複数のルールセット指定できます(解析順に指定)。<ruleset-stack>
初期ルールセット・スタックを構成するルールセットのリストを指定します。リストに指定するルールセットの順序は、スタックの最上位から最下位です。
E.2.3 複数のソースからのルールセットを持つルール実行セットの作成
ルール実行セットに複数のソースから生成されたルールが含まれ、それらのソースがルール・デザイナで定義されたルールセットとRL言語のルールセットの混在である場合があります。この場合、XML要素<rule-execution-set>
のセットには、ルールの各ソースごとに1つずつ複数の<rule-source>
要素が含まれます。<rule-source>
は、Rules Engineでの解析順にリストする必要があります。
ノート:
このリリースのOracle Business Rulesでは、JSR-94ルール実行セットで参照できるのは1つのルール・デザイナ・ディクショナリのみです。
E.3 JSR-94インタフェースをOracle Business Rulesとともに使用
この項では、JSR-94インタフェースに関してOracle Business Rules固有の事項を説明します。
この項では、次の項について説明します。
-
createRuleExecutionSetを使用したルール実行セットの作成
-
createRuleSessionによるルール・セッションの作成
-
JSR-94メタデータの操作
-
Oracle Business Rules JSR-94拡張の使用
E.3.1 createRuleExecutionSetを使用したルール実行セットの作成
javax.rules.admin
のRuleExecutionSetProvider
およびLocalRuleExecutionSetProvider
インタフェースには、RuleExecutionSet
オブジェクトを作成するためのcreateRuleExecutionSet
が含まれています。
createRuleExecutionSet
メソッドを使用するために、最初の引数は表E-3に示すように解析されます。
表E-3 createRuleExecutionSetメソッドの最初の引数の種類
引数 | 説明 |
---|---|
|
構成スキーマからの |
|
構成スキーマからの |
|
構成スキーマからの |
|
構成スキーマからの |
ノート:
JSR-94には、java.lang.Object
引数を取るcreateRuleExecutionSet
メソッドも含まれます。この引数は、ルール実行セットの抽象構文ツリーであると想定されています。Oracle Business Rules for Oracle Fusion Middleware 11gリリース1 (11.1.1)では、この引数によるこれらのメソッドの使用はサポートされていません。java.lang.Object
引数を使用してこれらのメソッドを起動すると、RuleExecutionSetCreateException
という例外が発生します。
createRuleExecutionSet
メソッドの第2引数は、ベンダー固有プロパティのjava.util.Map
です。
E.3.2 createRuleSessionを使用したルール・セッションの作成
クライアントでは、RuleRuntime
クラスのcreateRuleSession
メソッドを使用して、JSRー94ルール・セッションを作成します。このメソッドは、ベンダー固有プロパティのjava.util.Map
引数を取ります。この引数は、Oracle Business Rules oracle.rules.rl.RuleSession
に対して定義されたプロパティを渡すために使用できます。
ルール実行セットにURLまたはリポジトリ・ルール・ソースが含まれる場合、そのソースからのルールは、新規のRuleSession
が作成されるたびに取得されます。
E.3.3 JSR-94メタデータの使用
JSR-94では、ルール実行セットおよびルール実行セット内のルールに対して、メタデータを使用できます。Oracle Business Rules実装では、JSR-94仕様以外のメタデータは追加されません。
ルール実行セットの説明はオプション項目であるため、説明がない場合があります。説明がない場合は、空の文字列が戻されます。ルールについては、ルール名のみが使用可能で、説明は空の文字列で初期化されます。
E.3.4 Oracle Business RulesのJSR-94拡張機能の使用
この項では、JSR-94実装クラスで提供される拡張機能について説明します。
この項では、次の拡張機能について説明します。
E.3.4.1 拡張されたcreateRuleExecutionSetを使用したルール実行セットの作成
Oracle Business Rulesには、RuleExecutionSet
を作成する際に入力として必要なXML制御ファイルを簡単に作成するために、ヘルパー関数が用意されています。
RLLocalRuleExecutionSetProvider
クラスのヘルパー・メソッドcreateRuleExecutionSet
を使用できます。createRuleExecutionSet
メソッドには、次のシグネチャがあります。
RuleExecutionSet createRuleExecutionSet(String name, String description, RuleSource[] sources, String[] rulesetStack, Map properties)
表E-4に、createRuleExecutionSet
の引数を示します。
表E-4 createRuleExecutionSetの引数
引数 | 説明 |
---|---|
|
ルール実行セットの名前を指定します。 |
|
ルール実行セットの説明を指定します。 |
|
ルールのソースを指定する配列を指定します。
詳細は、 |
|
ルールの実行前に設定されるRL Languageルールセット・スタックの初期内容を指定します。配列の内容は、スタックの最上位(0番目の要素)から最下位(最後の要素)の順に指定します。 |
|
Oracle固有プロパティ。 |
E.3.4.2 JSR-94でのRL Language関数の起動
JSR-94ルール・セッションとのステートフルな相互作用では、ユーザーが任意にRL Language関数を起動できることが必要です。JSR-94 StatefulRuleSession
インタフェースを実装するクラスによって、oracle.rules.rl.RuleSession
クラスのcallFunction
メソッドにアクセスできます。
次の例に、JSR-94 StatefulRuleSession
で引数なしのRL Language関数を起動する方法を示します。
import javax.rules.*; ... StatefulRuleSession session; ... ((oracle.rules.jsr94.RLStatefulRuleSession) session).callFunction("myFunction");