流口水没有正确排序数字

时间:2013-01-17 05:22:59

标签: drools rule-engine

我是Drools的新手,我正在努力让示例程序正常运行。 此示例在drools文档http://docs.jboss.org/drools/release/5.5.0.Final/drools-expert-docs/html_single/index.html#d0e9542中给出。 这个流口水规则预计会排序整数。我只是更改了示例中给出的数字,但它们没有按预期排序。 尝试使用drools版本5.5.0,5.5.1和主6.0.0,但得到了相同的错误结果。

以下是主要代码:

    package com.sample;

    public class Example2 {
      public static void main(String[] args) throws Exception {
        Number[] numbers = new Number[] { wrap(5), wrap(6), wrap(4), wrap(1), wrap(2) };
        new RuleRunner().runRules(new String[] { "Example3.drl" }, numbers);
      }

      private static Integer wrap(int i) {
        return new Integer(i);
      }
    }

RuleRunner类与示例中给出的相同,我认为我不应该在这里给出它,因为它会使问题变得混乱。它只是创建KnowledgeBase,有状态会话,插入上面'numbers'数组中给出的事实,然后在会话中调用fireAllRules方法。

规则文件(Example3.drl)是:


规则“规则04”
方言“mvel”

$ number:Number()
不是数字(intValue< $ number.intValue)
然后
System.out.println(“找到的值为:”+ $ number.intValue());
收回($号);
结束

我得到的输出如下:

Loading file: Example3.drl
Inserting fact: 5
Inserting fact: 6
Inserting fact: 4
Inserting fact: 1
Inserting fact: 2
Number found with value: 1
Number found with value: 4
Number found with value: 2
Number found with value: 5
Number found with value: 6

不正确的预期升序排序。

我可能做错了什么?我无法想象drools规则引擎会在这个基本级别被打破。

1 个答案:

答案 0 :(得分:1)

这似乎是5.5.0以后引入但仍然存在的错误。
本分类代码适用于5.4.0。

解决方法:


而不是:
“不是数字(intValue< $ number.intValue)”
如果你使用:
“不是数字(intValue()< $ number .intValue)“
然后它起作用。


一个没有告诉它是一个函数的非getter方法似乎会产生问题。

一种令人衰弱的问题,会降低评估阶段对产品的信心。