Drools-在内存中插入函数创建的对象

Drools-在内存中插入函数创建的对象,drools,Drools,在Drools DRL文件中,我有一个返回自定义对象的函数。 在规则中,我调用这个函数,然后将函数结果插入内存。 但是,随后的规则似乎不会拾取这个插入的对象 如果我在规则中创建对象(而不是通过函数)并插入它,后续规则可以看到它并正常运行 代码示例如下: declare SomeObject value : String end function SomeObject createSomeObject() { SomeObject obj = new SomeObject();

在Drools DRL文件中,我有一个返回自定义对象的函数。 在规则中,我调用这个函数,然后将函数结果插入内存。 但是,随后的规则似乎不会拾取这个插入的对象

如果我在规则中创建对象(而不是通过函数)并插入它,后续规则可以看到它并正常运行

代码示例如下:

declare SomeObject
    value : String
end


function SomeObject createSomeObject() {
    SomeObject obj = new SomeObject();
    obj.setValue("something");
    return obj;
}


rule "run first" ruleflow-group "testrules-test"
dialect "mvel"
when
    eval(true)
then
    insert(createSomeObject());     // this does not trigger the "object exists" rule
    insert(new SomeObject());       // this triggers the "object exists" rule
end


rule "object exists" ruleflow-group "testrules-test"
dialect "mvel"
when
    SomeObject()
then
    info("the object exists");
end
(请注意,我已经显示了两种插入方法,但当然没有在两种方法都处于活动状态时运行)

我明显的问题是,为什么函数创建的对象没有被插入内存

这也让我了解了Drools规则中函数的使用;是否应该避免,或者是否没有绩效或行为优势或劣势


谢谢。

不考虑ruleflow组,这对我使用6.1和6.4是有效的,所以我倾向于怀疑其他一些问题。哪一个版本?如果省略ruleflow组是否有效?它是Drools 5.4。它会产生与忽略ruleflow组相同的结果,因此这是一个bug。5.4版不会有补丁。除非您坚持使用declare,否则您可以尝试使用静态Java方法而不是DRL函数考虑从这个古老版本升级。一个升级项目已经到位,只是不及时的规则,我需要写…一旦升级,我会再试一次。