我在我的应用程序中使用 Drools 6.1.0。
我们计划编写一个包含所有规则的巨大 .drl 文件。
规则主要有2类 1.空检查 2.业务验证
使用规则流组、激活组和显着性,我计划在将事实添加到会话时管理要执行/触发的规则。
即使采用这种方法,该解决方案对我也不起作用,因为。
可以说我有以下 .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 手册:条件评估不依赖于特定的评估序列或时间点,而是在生命周期的任何时间连续发生引擎。”
所以发生的事情是执行这个文件的代码在 rule2 上抛出 Nullpointer 异常,因为innerMsg.something.something
它是 NULL
注意:我不想使用 || 合并所有空检查。在单个 when 语句中,因为我想捕获特定的空条件并基于该条件创建错误消息。
我的问题如下。
- 使用drools 规则对链接对象进行Nullchecks 是个好主意吗?
- 我是否应该使用诸如顺序规则执行之类的其他东西(不确定 Drools 中是否可用),这将允许我按特定顺序执行规则。
- 有没有另一种方法来实现这一点