0

嗨,我是 Drools fusion 的新手,我一直在开发一些示例规则来了解 drools fusion 的工作。我需要一些帮助来理解流口水
我的规则:

rule "Sample Rule"

    when
     $t:Test (num == 10) from entry-point Stream
    then
        System.out.println($t.str);

end

测试是一个具有str字符串和num整数的类。

我需要通过某种相关性触发事件,以便它不断插入测试对象并触发事件,因为num这些对象的总和超过 100,例如:规则“您的第一条规则”

    when
     $t:Test ($tmp:num) from entry-point Stream //store num's value

     ($tmp>100)      // fire if sum of num's more than 100
    then
        System.out.println($t.str);

end

我的代码是:

WorkingMemoryEntryPoint entryPoint1=ksession.getWorkingMemoryEntryPoint("Stream")
        def eg=new Test()
        eg.str="Test"
        eg.num=10
        EventFactHandle factHandle = (EventFactHandle)entryPoint1.insert(eg)

问题 2:我想了解fireAllRules(). 每次将对象插入drools运行时(入口点或会话)时,是否需要通过此方法触发?

我希望你能理解我的情况。请提前帮助和感谢

4

1 回答 1

0

我不知道#1应该是什么问题。我可以看到这条线

($tmp>100)

语法不正确;条件应该是前面模式的一部分或包含在 eval() 中。

问题 #2:您可以插入任意数量的事实并调用 fireAllRules(),也可以在每次插入后调用 fireAllRules()。但是请注意,结果可能不一样。考虑一个场景,其中一条规则在单个 X 上触发时立即删除事实 X(),而另一条规则在有两个 X() 类型的事实时触发。如果在每次插入后调用 fireAllRules(),则第二条规则可能永远不会触发,

于 2013-12-31T12:46:57.863 回答