Drools Drool无法正确排序数字

Drools Drool无法正确排序数字,drools,rule-engine,Drools,Rule Engine,我是Drools新手,正在尝试让示例程序正常工作。 drools文档中给出了此示例。 这个drool规则应该对整数进行排序。我只是更改了样本中给出的数字,它们没有按预期排序。 尝试使用drools版本5.5.0、5.5.1和master 6.0.0,但得到了相同的错误结果 主要代码如下: 包com.sample; 公共课示例2{ 公共静态void main(字符串[]args)引发异常{ 编号[]编号=新编号[]{wrap(5)、wrap(6)、wrap(4)、wrap(1)、wrap(2)};

我是Drools新手,正在尝试让示例程序正常工作。 drools文档中给出了此示例。 这个drool规则应该对整数进行排序。我只是更改了样本中给出的数字,它们没有按预期排序。 尝试使用drools版本5.5.0、5.5.1和master 6.0.0,但得到了相同的错误结果

主要代码如下: 包com.sample; 公共课示例2{ 公共静态void main(字符串[]args)引发异常{ 编号[]编号=新编号[]{wrap(5)、wrap(6)、wrap(4)、wrap(1)、wrap(2)}; new RuleRunner().runRules(新字符串[]{“Example3.drl”},数字); } 私有静态整数换行(int i){ 返回新的整数(i); } } RuleRunner类与示例中给出的相同,我认为不应该在这里给出,因为它会使问题变得混乱。它只需创建知识库、有状态会话,插入上面“数字”数组中给出的事实,然后在会话上调用fireAllRules方法

规则文件(Example3.drl)是:
规则“规则04”
方言“mvel”

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

我得到的结果如下: 正在加载文件:Example3.drl 插入事实:5 插入事实:6 插入事实:4 插入事实:1 插入事实:2 找到值为1的数字 找到值为4的数字 找到值为2的数字 找到值为5的数字 找到值为6的数字 不是正确的预期升序排序顺序。
我可能做错了什么?我无法想象drools规则引擎会在这个基本级别被破坏。

这似乎是5.5.0以后引入的一个bug,现在仍然存在。
此排序代码适用于5.4.0。

解决方法:
而不是:
“not Number(intValue<$Number.intValue)”
如果您使用:
“not Number(intValue()<$Number.intValue)”
则它可以工作



一个没有说明它是函数的非getter方法似乎会产生问题。
在评估阶段降低产品信心的削弱性问题。

这更可能是mvel的问题。当规则执行超过20次并且JIT编译器启动时,您可能会遇到类似的问题。错误与“not”和“exist”约束以及=。根据邮件列表上的人所说,这个问题在5.6和6.0中已经得到了解决,并且为5.5创建了一个后端口。 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); } } 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