Java Rule Engine API(JSR-94)の仕様では、Java SEまたはJava EEクライアントからルール・エンジンにアクセスするための標準JavaランタイムAPIが定義されています。JSR-94を使用してOracle Business Rulesにアクセスできます。
この章の内容は次のとおりです。
詳細は、次のWebサイトを参照してください。
Oracle Business Rulesには、JSR-94サポート機能が用意されています。このため、より移植性の高いルール対応アプリケーションを作成できます。
Oracle Business RulesルールセットからJSR-94実行セットを作成し、これらの実行セットからJSR-94ルール・セッションを作成できます。 詳細は、付録E.2「Oracle Business RulesルールセットからのJSR-94ルール実行セットの作成」を参照してください。
Oracle Business Rulesルールセットにアクセスし、JSR-94 APIを使用してOracle Business Rules Engineに対して実行できます。 詳細は、付録E.3「JSR-94インタフェースをOracle Business Rulesとともに使用」を参照してください。
Oracle Business Rulesには、便利なJSR-94 APIの拡張機能も用意されています。 詳細は、付録E.3.4「Oracle Business RulesのJSR-94拡張機能の使用」を参照してください。
JSR-94をRL Languageテキストでルールとともに使用するには、ルールをJSR-94ルール実行セットにマップする必要があります。
JSR-94ルール実行セット(ルール実行セット)は、一括して実行することを目的としたルールのコレクションです。ルール実行セットは、実行する前に登録する必要があります。この登録によって、ルール実行セットがURIに関連付けられます。JSR-94ルール・セッションは、このURIを使用して作成できます。
|
注意: Oracle Business Rulesでは、JSR-94実行セットの登録は永続的ではありません。したがって、ルール実行セットは、JSR-94RuleExecutionSetProviderインタフェースを使用し、プログラム上で登録する必要があります。 |
詳細は、付録E.3.1「createRuleExecutionSetを使用したルール実行セットの作成」を参照してください。
JSR-94は、テキストとして保存されたRL Languageルールセットとともに使用できます。この場合、Oracle RLテキストはルール実行セットに直接挿入されます。 RL Languageテキストを挿入する際に使用できるJSR-94拡張機能の詳細は、「拡張されたcreateRuleExecutionSetを使用したルール実行セットの作成」を参照してください。
Oracle Business RulesのOracle RL Languageテキストからルール実行セットを作成する手順は、次のとおりです。
RL Languageのマッピング情報をXML文書に指定します。 表E-1に、ルール実行セットの作成に必要なマッピング要素を示します。 例E-1には、RL LanguageテキストをJSR-94ルール実行セットにマッピングするためのサンプルのXML文書を示します。
次に、このXML文書をJSR-94管理APIで使用して、ルール実行セットを作成します。作成したルール実行セットは、RuleAdministrationインスタンスを使用して、JSR-94ランタイムに登録されます。
表E-1 JSR-94のOracle Business RulesのOracle RL LanguageテキストXMLマッピング要素
| 要素 | 説明 |
|---|---|
|
|
|
|
|
初期ルールセット・スタックを構成するルールセットのリストを指定します。リストに指定するルールセットの順序は、スタックの最上位から最下位です。 |
|
注意: <rl-text>要素に、事前定義済のXMLエンティティを含めることはできません。これには、「&」、「>」、「<」、「"」および「\」の各文字が含まれます。 |
例E-1 Oracle RLプログラムで定義されたルールセットの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>
JSR-94は、URLを使用して指定したOracle RLルールセットとともに使用できます。 URLを指定する際に使用できるJSR-94拡張機能の詳細は、「拡張されたcreateRuleExecutionSetを使用したルール実行セットの作成」を参照してください。
URLで指定したOracle RLテキストからルール実行セットを作成する手順は、次のとおりです。
Oracle RLのマッピング情報をXML文書に指定します。 表E-2に、ルール実行セットの作成に必要なマッピング要素を示します。 例E-2には、Oracle RLテキストをJSR-94ルール実行セットにマッピングするためのサンプルのXML文書を示します。
次に、このXML文書をJSR-94管理APIで使用して、ルール実行セットを作成します。作成したルール実行セットは、RuleAdministrationインスタンスを使用して、JSR-94ランタイムに登録されます。
表E-2 JSR-94のOracle Business RulesのOracle RL URL XMLマッピング要素
| 要素 | 説明 |
|---|---|
|
|
|
|
|
初期ルールセット・スタックを構成するルールセットのリストを指定します。リストに指定するルールセットの順序は、スタックの最上位から最下位です。 |
例E-2 URLで定義されたルールセットの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>
ルール実行セットには、複数のソースから導出されたルールを含めることができます。そのソースとして、Rules Designerで定義されたルールセットとRL Languageルールセットが混在しても構いません。この場合、XML要素<rule-execution-set>セットには、複数の<rule-source>要素を含めることができます(ルールの各ソースに対して1つ)。各<rule-source>は、Rules Engineで解析される順にリストする必要があります。
|
注意: このリリースのOracle Business Rulesでは、JSR-94ルール実行セットで参照できるのは1つのRules Designerディクショナリのみです。 |
この項では、JSR-94インタフェースに関してOracle Business Rules固有の事項を説明します。
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です。
クライアントでは、RuleRuntimeクラスのcreateRuleSessionメソッドを使用して、JSRー94ルール・セッションを作成します。このメソッドは、ベンダー固有プロパティのjava.util.Map引数を取ります。この引数は、Oracle Business Rules oracle.rules.rl.RuleSessionに対して定義されたプロパティを渡すために使用できます。ルール実行セットにURLまたはリポジトリ・ルール・ソースが含まれる場合、そのソースからのルールは、新規のRuleSessionが作成されるたびに取得されます。
JSR-94では、ルール実行セットおよびルール実行セット内のルールに対して、メタデータを使用できます。Oracle Business Rules実装では、JSR-94仕様以外のメタデータは追加されません。ルール実行セットの説明はオプション項目であるため、説明がない場合があります。説明がない場合は、空の文字列が戻されます。ルールについては、ルール名のみが使用可能で、説明は空の文字列で初期化されます。
この項では、JSR-94実装クラスで提供される次の拡張機能について説明します。
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の引数
JSR-94ルール・セッションとのステートフルな相互作用では、ユーザーが任意にRL Language関数を起動できることが必要です。JSR-94 StatefulRuleSessionインタフェースを実装するクラスによって、oracle.rules.rl.RuleSessionクラスのcallFunctionメソッドにアクセスできます。
例E-3に、JSR-94 StatefulRuleSessionで引数なしのRL Language関数を起動する方法を示します。