2013-10-25 2 views
0

У меня есть многолетний опыт работы с 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» отдельно в разных программах.

+0

Вы тестировали правила в более новой версии Drools? Если да, то работали ли они? Т.е. это ошибка Drools 4? – Steve

ответ

0

Ну, после многих экспериментов и возиться вот что я нашел: Я не знаю, если это ошибка или нет, но это происходило из-за различий типов между полями «связывания».

Tagret.targetId является примитивным. Item.targetId длинный примитив.

правила перезаписи этим способом решить эту проблему:

rule "testcase" 
    salience 300 
    when 
     $item : Item(itemTypeId in (Item.ITEM_TYPE_A, Item.ITEM_TYPE_B), targetId < 0) 
     not Tegret(targetId == ((long)$item.targetId)) 
    then 
     retract ($item); 
end 

перечитайте документацию, чтобы найти какие-либо намеки на места ограничения «совместимость». нет результата

Смежные вопросы