У меня есть многолетний опыт работы с JBOSS Drools. текущего проекта я работаю с использованиями Drools 4.Что не так с правилом Drools?
вот один из правил, которые я имею в проекте
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} Target {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» отдельно в разных программах.
Вы тестировали правила в более новой версии Drools? Если да, то работали ли они? Т.е. это ошибка Drools 4? – Steve