2013-10-18 32 views
0
rule "STANDARD - set available application" 
salience(2) 
when 
    accumulate (Application($priority : priority, running == false), $highestPriority :   min($priority)) 
then 
    System.out.println("set app: "+$highestPriority); 
end 

我的代码在上面。我的目标是找到运行==错误的应用程序,并获得这些应用程序的最高优先级(最高值为最低值),但是此规则触发所有应用程序并忽略我的状况。思考???如何根据条件和组类一起累积在Drools中

回答

2

这里没有必要使用和积累模式。您可以将您的规则改写为这样的:

rule "STANDARD - set available application" 
salience(2) 
when 
    $highestPriorityApp: Application(running == false, $highestPriority : priority) 
    not Application(running == false, priority < $highestPriority) 
then 
    System.out.println("set app: "+$highestPriorityApp); 
end 

希望它能帮助,

+0

还没有彻底检查您的替代解决方案,最有可能是这个问题的最佳解决方案。但根据我的理解,OP发布的代码是正确使用累积模式,所以我很想知道为什么它不起作用。有什么线索? – kaskelotti

+0

你如何插入你的事实并解雇你的规则?你插入了所有的事实,然后解除规则?或者你是否在每次插入后触发规则? –

+0

如果我理解正确,你说的是OP发布的累积函数是正确的,但是如果他/她没有将所有事实同时传递给WM,并且用所有事实发射规则,它就无法工作。这就说得通了。 – kaskelotti