【问题标题】:Condition check for Class variables inside drools rule not working流口水规则中的类变量的条件检查不起作用
【发布时间】:2016-06-15 04:49:12
【问题描述】:

我正在上以下课程

  public class SeniorClass {

    List<Students> stud;
    String highScorerMath;
    String highScorerChemistry;
    String highScorerPhysics;
    String highScorerEnglish;
    int studentPassCount=2;

    public String getHighScorerMath() {
        return highScorerMath;
    }

    public void setHighScorerMath(String highScorerMath) {
        this.highScorerMath = highScorerMath;
    }

    public String getHighScorerChemistry() {
        return highScorerChemistry;
    }

    public void setHighScorerChemistry(String highScorerChemistry) {
        this.highScorerChemistry = highScorerChemistry;
    }

    public String getHighScorerPhysics() {
        return highScorerPhysics;
    }

    public void setHighScorerPhysics(String highScorerPhysics) {
        this.highScorerPhysics = highScorerPhysics;
    }

    public String getHighScorerEnglish() {
        return highScorerEnglish;
    }

    public void setHighScorerEnglish(String highScorerEnglish) {
        this.highScorerEnglish = highScorerEnglish;
    }

    public int getStudentPassCount() {
        return studentPassCount;
    }

    public void setStudentPassCount(int studentPassCount) {
        this.studentPassCount = studentPassCount;
    }

    public List<Students> getStud() {
        return stud;
    }

    public void setStud(List<Students> stud) {
        this.stud = stud;
    }


}

当我将与此类相关的数据插入 Drools 会话并触发规则时。以下规则似乎不起作用。

rule "Students passed count"
lock-on-active true
dialect "mvel"
dialect "java"
salience 0
when
        $sc : SeniorClass(studentPassCount > 0);        
then
        System.out.println(" Rule 6: Total no. of Students passed are: " + $sc.getStudentPassCount());
end

我不确定为什么我的“studentPassCount > 0”条件检查不正确,即使在课堂上我已将此变量值设置为 2。任何人都可以建议我解决这种情况。

【问题讨论】:

    标签: java drools


    【解决方案1】:

    你是否在工作记忆中插入了 SeniorClass 类的事实?

    您确定 setStudentPassCount 的值不是

    您的规则库中是否还有其他将 lock-on-active 设置为 true 的规则? 我强烈建议你不要使用这个属性,除非没有别的办法。

    您确定您的规则在语法上是正确的,因此规则库中包含此规则(和其他规则)吗?

    你调用了fireAllRules 吗? (您是否观察到其他规则会触发?)

    为什么dialect 使用矛盾的规则属性值? 坚持其中之一。

    【讨论】:

    • 是的,我已将 SeniorClass 插入到工作内存中,因为我的其他规则运行良好。 studentPassCount 将始终具有 0 或更大的值。是的,还有其他将 lock-on-active 设置为 true 的规则是的,它们在语法上是正确的,因为我没有得到任何异常。是的,我已经调用了 fireAllRules。我使用这两种方言只是为了实现两者的功能。
    • 在一组规则上的属性 lock-on-active 可能会禁止触发此规则。 - 您不能使用dialect 来使用两者的功能;它是非此即彼。 - 无论如何,不​​可能从代码和您的答案中分辨出真正的问题所在。请编辑您的问题并提供用于创建会话和插入事实的代码。或者,检查问题是否仍然存在,此规则是唯一的规则,或者显示所有规则。简而言之:重现问题的所有代码,并确保说明 Drools 版本。
    • 你可以在这里找到我的代码:github.com/gomzeegautam/sg-usersearch/tree/master/sg-usersearch 我正在使用 Drools:5.3
    • 是的,但我不会深入研究数百行代码。将其减少到最少的代码量——只有 Java 和 DRL,没有 XML——重现问题。 - 但是,我建议您避免 lock-on-active,并且只使用一种方言。 (请参阅我的答案的编辑。)
    猜你喜欢
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    相关资源
    最近更新 更多