2011-02-24 75 views
1

我正在使用Drools规则服务器作为服务。我们正在使用决策表Drools决策表规则不使用更新值

Pre Rules Movie Object: 
actor: "unknown" 
movie: "Ghostbusters" 
rating: 9 

我在Drools决策表中有2条简单规则。第一条规则检查一个值(movie=="Ghostbusters"),然后设置对象setActor("Bill Murray")的呼叫。

第二条规则检查演员是什么。我在这第二条规则中有2行。 if Actor == "Bill Murray"它调用setRating(10)的操作。如果actor == "unknown"setRating(8)

如预期的第一条规则火灾,我可以的println getActor显示它的“比尔·默里”,但在第二个规则中,actor == "unknown"动作始终闪光。即使在该行我打印getActor它打印“比尔默里”,但它使用“未知”的规则。

当对象从规则中返回时,它具有Actor = Bill Murray并且规则中的所有值均设置为“正确”,但规则似乎始终使用在评估规则时我在规则外部创建的原始对象。

有什么我必须添加到决策表或调用drools规则服务器来更新规则表之间的对象的调用吗?

+0

你是如何构建决策表的?你可以在这里发布吗? – 2012-07-24 22:59:30

回答

0

你应该使用updatemodify方法,在Drools中的文档(4.8.4.1,4.8.4.2)描述:

rule "modify stilton" 
when 
    $stilton : Cheese(type == "stilton") 
then 
    modify($stilton){ 
     setPrice(20), 
     setAge("overripe") 
    } 
end 

这会告诉该对象已经改变,规则将重新应用引擎。

1

我知道你问了这个问题的时间已经过去了,但对于其他人也有同样的问题: 如上所述,你应该修改对象而不是设置它。要做到这一点在决策表中您RuleTable添加一个动作列和第二行你应该增加:

modify($className){ setActor("Bill Murray")};

保留下的第一行的行动的空白。