流口水和规则引擎的相对新来者。
我有3条规则,它们实质上检查同一对象的不同实例是否存在,如果不存在,它们会创建一个规则并将其插入工作内存中。在执行了一系列其他相关规则之后,有一条规则可以检查模型的有效性。
这里的目标是让同一个对象的三个不同实例代表三个不同实体,并且只要其中两个处于有效状态就可以继续进行。
它们的定义如下:
rule "SetupA"
salience 80
lock-on-active
when
not InvalidModel(name == "A-Name")
then
InvalidModel invalidA = new InvalidModel();
invalidA.setName("A-Name");
insert(invalidA);
end
rule "SetupB"
salience 80
lock-on-active
when
not InvalidModel(name == "B-Name")
then
InvalidModel invalidB = new InvalidModel();
invalidB.setName("B-Name");
insert(invalidB);
end
rule "SetupC"
salience 80
lock-on-active
when
not InvalidModel(name == "C-Name")
then
InvalidModel invalidC = new InvalidModel();
invalidC.setName("C-Name");
insert(invalidC);
end
rule "VALIDATE_MODEL_FOR_ANY_INVALID_FLAGS"
salience -10
when
$invalidList: List(size > 1) from collect(InvalidModel(isNotFound || isFlagged || isNotActive))
then
setDecision(result, "Denied");
end
但是,正在发生的事情似乎是这些规则在对此规则集的每个请求上都匹配,我将其解释为工作内存中不存在的事实。我希望当相应名称的每个事实都不存在时会触发规则一次,然后不要再次触发规则,因为没有什么可以将其从工作内存中删除。但是,我对触发规则的审核日志显示,对于每个请求,这些规则都会被触发。
此外,第四条规则的条件似乎未按预期执行,因为它返回了这样的响应
=============== DEBUG MESSAGE: illegal bytecode sequence - method not verified ================
我的要求是就我的逻辑/语言语言结构可能误入歧途提供一些指导。感谢您的宝贵时间。