如果主题令人困惑,那是因为问题本身对我们来说太混乱了。事情就是这样。
我们有一个应用程序,它利用 Drools 的规则引擎来帮助我们评估 Java bean(Drool 术语中的事实对象)的字段值,并根据评估结果将 bean 中的特定标志字段更新为“true”或“false”。所有的评估和更新操作都在模板中定义。
它调用 Drools 的方式是这样的。首先,它在第一次使用之前创建一个有状态的会话。当我们有一个bean列表时,我们将它们一一插入到会话中,并调用fireAllRules。触发规则后,我们保留会话以供以后使用。一旦我们有了另一批豆子,我们就会一次又一次地做同样的事情……
这听起来很有道理。但后来在测试过程中,我们发现虽然第一批规则引擎运行良好,但后面的批次却不行。一些 bean 被错误地更新了,也就是说,即使没有字段匹配任何规则,标志也被更新为 true。
然后我们想也许我们不应该重用会话。因此,我们将所有批次的所有 bean 放入一个大列表中。但很快我们发现有问题的 bean 仍然得到了错误的更新。更奇怪的是,如果我们在不同的机器上运行这个测试,有问题的 bean 可能会有所不同。但是,如果我们在单元测试中自己测试任何有问题的 bean,则一切正常。
现在我希望我已经解释了这个问题。我们是 Drools 的新手。也许我们在不知道的地方做错了什么。这里有人可以给出问题的任何方向吗?这将是我们一个很大的好处!