在知识库对象上配置Drools执行

时间:2014-07-17 13:42:00

标签: java drools rule-engine

假设我添加了一些对象

  

{O1,O2,O3}

和规则

  

{R1,R2,R3}

在我的知识库中

当我解除所有规则时,执行顺序如下:

R1 <on> O1
R1 <on> O2
R1 <on> O3

R2 <on> O1
R2 <on> O2
R2 <on> O3

R3 <on> O1 (add to passed object cache)
R3 <on> O2 (add to passed object cache)
R3 <on> O3 (add to passed object cache)

这意味着我不能将传递的对象放在缓存中,直到最后一个循环

如何将执行顺序更改为:

R1 <on> O1
R2 <on> O1
R3 <on> O1 (add to passed object cache)

R1 <on> O2
R2 <on> O2
R3 <on> O2 (add to passed object cache)

R1 <on> O3
R2 <on> O3
R3 <on> O3 (add to passed object cache)

1 个答案:

答案 0 :(得分:1)

来自Drools Expert User Guide, section 4.3.4.2

  

作为一般规则,最好不要依赖以任何特定顺序触发的规则,并且在不担心“流程”的情况下编写规则。

即使您看到的执行顺序也无法保证。这个例子似乎是关于命令式的风格控制,意思是“首先执行此操作,然后执行此操作,然后将对象放在某处”。规则引擎是这项工作的错误工具,像Java这样的编程语言更适合对循环等进行精细控制。