我有很长时间使用 JBOSS Drools 的经验。我正在使用的当前项目使用 Drools 4。
这是我在项目中的规则之一
rule "testcase"
salience 300
when
$item : Item(itemTypeId in (Item.ITEM_TYPE_A, Item.ITEM_TYPE_B), targetId < 0)
not Tegret(targetId == $item.targetId)
then
retract ($item);
end
想法是从没有关联目标对象的工作内存中收回此类项目。我正在使用工作内存中的这些对象对其进行测试:
项目 {itemId=7305, itemTYpeId=ITEM_TYPE_A, targetId=-1023} 目标 {targetId = -1023}
在这种情况下,规则不应触发,但确实如此。经过大量实验后,我发现了这种奇怪的行为:
规则“testcase2”会触发,而“testcase1”不会。
rule "testcase1"
salience 300
when
$item : Item(itemTypeId in (Item.ITEM_TYPE_A, Item.ITEM_TYPE_B), targetId < 0)
Tegret(targetId == $item.targetId)
then
...
end
rule "testcase2"
salience 300
when
$item : Item(itemTypeId in (Item.ITEM_TYPE_A, Item.ITEM_TYPE_B), targetId < 0)
Tegret($ti:targetId)
eval($ti == $item.targetId)
then
...
end
那么这里出了什么问题?我在不同的程序运行中分别运行“testcase1”和“testcase2”。