アプリケーションで Drools 6.1.0 を使用しています。
すべてのルールを含む単一の巨大な .drl ファイルを作成する予定です。
ルールには主に 2 つのカテゴリがあります。 1. Null チェック 2. ビジネス検証
ruleflow-group、activation-group、および salience を使用して、ファクトがセッションに追加されたときに実行/起動するルールを管理することを計画しています。
このアプローチを使用しても、解決策がうまくいかない場合があります。
以下の .drl ファイルがあるとしましょう
rule "rule1"
ruleflow-group "primary"
activation-group "NullCheck"
salience 5
when
$m : Message(innerMsg.something == null)
then
// do something
rule "rule2"
ruleflow-group "primary"
activation-group "NullCheck"
salience 4
when
$m : Message(innerMsg.something.something == null)
then
// do something
rule "rule3"
ruleflow-group "primary"
activation-group "NullCheck"
salience 3
when
$m : Message(innerMsg.something.something.something == null)
then
// do something
Drools のドキュメントには、「すべての制約は、ファクトが挿入されたときに評価されます。Drools のマニュアルから: 条件の評価は、特定の評価シーケンスまたは時点に結び付けられていませんが、条件の評価は、オブジェクトの有効期間中いつでも継続的に発生します。そのエンジン。"
innerMsg.something.something
何が起こっているかというと、このファイルを実行しているコードは、ルール 2が NULLであるため、Nullpointer Exception をスローしているということです。
注: || を使用してすべてのヌル チェックを無効にしたくはありません。特定のnull条件をキャプチャし、それに基づいてエラーメッセージを作成したいので、単一のwhenステートメントで。
私の質問は以下の通りです。
- drools ルールを使用して、チェーン オブジェクトの Nullcheck を実行するのは良い考えですか。
- 特定の順序でルールを実行できるようにする、シーケンシャル ルール実行 (Drools で使用できるかどうかは不明) のような別のものを使用する必要があります。
- これを達成する別の方法はありますか