84.2. ルールベースの設定
Red Hat Process Automation Manager には、RuleBaseConfiguration.java
オブジェクトが含まれます。これを使用して、デシジョンエンジンで例外ハンドラーの設定、マルチスレッドの実行、および順次モードを設定することができます。
ルールベースの設定オプションに関しては、Red Hat カスタマーポータル から ZIP ファイル Red Hat Process Automation Manager 7.11.0 Source Distribution をダウンロードし、~/rhpam-7.11.0-sources/src/drools-$VERSION/drools-core/src/main/java/org/drools/core/RuleBaseConfiguration.java
に移動してください。
以下のルールベースの設定オプションは、デシジョンエンジンで利用可能です。
- drools.consequenceExceptionHandler
設定すると、このシステムプロパティーは、ルールの結果によって例外の出力を管理するクラスを定義します。このプロパティーを使用して、デシジョンエンジンのルール評価にカスタムの例外ハンドラーを指定できます。
デフォルト値:
org.drools.core.runtime.rule.impl.DefaultConsequenceExceptionHandler
以下のオプションのいずれかを使用して、カスタムの例外ハンドラーを指定できます。
システムプロパティーで例外ハンドラーを指定:
drools.consequenceExceptionHandler=org.drools.core.runtime.rule.impl.MyCustomConsequenceExceptionHandler
プログラムを用いて KIE ベースを作成中に例外ハンドラーを指定:
KieServices ks = KieServices.Factory.get(); KieBaseConfiguration kieBaseConf = ks.newKieBaseConfiguration(); kieBaseConf.setOption(ConsequenceExceptionHandlerOption.get(MyCustomConsequenceExceptionHandler.class)); KieBase kieBase = kieContainer.newKieBase(kieBaseConf);
- drools.multithreadEvaluation
有効になると、このシステムプロパティーは、Phreak のルールネットワークを個々のパーティションに分割することで、デシジョンエンジンが並列してルールを評価できるようにします。このプロパティーを使用すると、特定のルールベースのルール評価の速度をあげることができます。
デフォルト値は
false
です。以下のオプションのいずれかを使用してマルチスレッド評価を有効化できます。
マルチスレッド評価のシステムプロパティーを有効化:
drools.multithreadEvaluation=true
プログラムを用いて KIE ベースを作成中にマルチスレッド評価を有効化:
KieServices ks = KieServices.Factory.get(); KieBaseConfiguration kieBaseConf = ks.newKieBaseConfiguration(); kieBaseConf.setOption(MultithreadEvaluationOption.YES); KieBase kieBase = kieContainer.newKieBase(kieBaseConf);
警告クエリー、顕著性、またはアジェンダグループを使用するルールは現在、並列のデシジョンエンジンではサポートされていません。これらのルールの要素が KIE ベースに存在する場合、コンパイラーは警告を発し、自動的にシングルスレッドの評価に切り替えます。しかし、ケースによっては、デシジョンエンジンはサポートされていないルールの要素を検出できず、ルールが間違って評価される可能性があります。たとえば、ルールが DRL ファイル内のルールの順序によって与えられた暗黙の顕著性に依存する場合は、デシジョンエンジンが検出できない可能性があり、その結果、サポートされていない顕著性の属性により、間違った評価となります。
- drools.sequential
これを有効にすると、このシステムプロパティーは、デシジョンエンジンの順次モードを有効にします。順次モードでは、デシジョンエンジンは、ワーキングメモリーでの変更に関係なく、デシジョンエンジンアジェンダにリスト化された順番でルールを一度評価します。これは、デシジョンエンジンがルールの
insert
、modify
、またはupdate
ステートメントをすべて無視し、ルールを単一シーケンスで実行することを意味します。その結果、ルールの実行は順次モードの方が速くなる可能性がありますが、重要な更新がルールに適用されない可能性があります。ステートレスな KIE セッションを使用し、アジェンダ内の後続のルールに対してルールの実行による影響を与えないようにする場合に、このプロパティーを使用できます。順次モードは、ステートレス KIE セッションのみに適用されます。デフォルト値は
false
です。以下のオプションのいずれかを使用して、順次モードを有効化できます。
順次モードのシステムプロパティーの有効化:
drools.sequential=true
プログラムを用いて KIE ベースを作成中に順次モードを有効化:
KieServices ks = KieServices.Factory.get(); KieBaseConfiguration kieBaseConf = ks.newKieBaseConfiguration(); kieBaseConf.setOption(SequentialOption.YES); KieBase kieBase = kieContainer.newKieBase(kieBaseConf);
特定の Red Hat Process Automation Manager プロジェクトの KIE モジュール記述子ファイル (
kmodule.xml
) で順次モードを有効化<kmodule> ... <kbase name="KBase2" default="false" sequential="true" packages="org.domain.pkg2, org.domain.pkg3" includes="KBase1"> ... </kbase> ... </kmodule>