使用Map在规则之间共享数据

时间:2012-04-05 00:54:22

标签: scope drools fact

这应该很简单,但我仍然迷失方向。 这里有一个非常相似的帖子:How to share data between Drools rules in a map? 但它并没有解决我的问题:

我有一套规则,在启动它们之前,我插入一个Map< String,Object>作为一个事实。 在这些规则中,我使用地图写出一些结论,如:

when
   $map : Map();
   something ocurrs;
then
   $map.put("conclusion1", 100);

现在我想在其他规则中使用这些中间结论,例如:

when
   $map : Map(this["conclusion1"] > 50)
then
   do something cool;

问题在于,当我执行规则时,它就像第二条规则没有看到第一条规则的结论,而且它不会触发。 我试过设置一个断点并分析工作记忆,实际上,Map会在第一个规则被触发后包含结论1,100。 我还尝试在结论中进行更新($ map),但这会触发无限循环。

知道为什么这不起作用,或者我的问题的任何替代解决方案?

谢谢!

1 个答案:

答案 0 :(得分:0)

当您修改事实时,您需要通知引擎您正在这样做。其中一种方法是使用modify()。 E.g:

when
   $map : Map();
   something ocurrs;
then
   modify( $map ) { 
      put("conclusion1", 100)
   }
end