首页 文章

Drools决策表规则未使用更新的值

提问于
浏览
1

我使用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 回答

  • 0

    我知道自你提出这个问题以来已经过了太多时间,但对于其他有同样问题的人来说:如上所述你应该修改对象而不是设置它 . 要在决策表中执行此操作,请在RuleTable中添加操作列,在第二行中添加:

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

    将第一行保持为空白 .

  • 1

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

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

    这将告诉引擎对象已被更改并且将重新应用规则 .

相关问题