Drools检查不存在的行为不像ID Expect

时间:2018-08-21 00:11:43

标签: drools rule-engine

流口水和规则引擎的相对新来者。

我有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 ================

我的要求是就我的逻辑/语言语言结构可能误入歧途提供一些指导。感谢您的宝贵时间。

0 个答案:

没有答案