我使用Drools Rules Server作为服务 . 我们正在使用决策表
Pre Rules Movie Object:
actor: "unknown"
movie: "Ghostbusters"
rating: 9
我在Drools Decision表中有2条简单的规则 . 第一个规则检查值( movie=="Ghostbusters"
),然后设置对象 setActor("Bill Murray")
的调用 .
第二条规则检查以查看Actor是什么 . 我在第二条规则中有2行 . if Actor == "Bill Murray"
它调用 setRating(10)
的动作 . 如果 actor == "unknown"
setRating(8)
第一条规则按预期触发,我可以打印 getActor
以显示它是"Bill Murray"但是在第二条规则中, actor == "unknown"
动作始终触发 . 即使在那一行我打印 getActor
它打印"Bill Murray"但它正在使用"unknown"规则 .
当对象从规则返回时,它具有 Actor = Bill Murray
并且规则"correct"中设置了所有值,但规则似乎始终使用我在评估规则时在规则之外创建的原始对象 .
我是否需要添加到决策表或调用drools规则服务器来“更新”规则表之间的对象?
2 回答
我知道自你提出这个问题以来已经过了太多时间,但对于其他有同样问题的人来说:如上所述你应该修改对象而不是设置它 . 要在决策表中执行此操作,请在RuleTable中添加操作列,在第二行中添加:
modify($className){ setActor("Bill Murray")};
将第一行保持为空白 .
你应该使用Drools docs(4.8.4.1,4.8.4.2)中描述的
update
或modify
方法:这将告诉引擎对象已被更改并且将重新应用规则 .