Правила таблицы решений Drools не используют обновленные значения - PullRequest
1 голос
/ 24 февраля 2011

Я использую Drools Rules Server в качестве службы. Мы используем таблицу решений

Pre Rules Movie Object:  
actor: "unknown"  
movie: "Ghostbusters"  
rating: 9

У меня есть 2 простых правила в таблице решений Drools. Первое правило проверяет значение (movie=="Ghostbusters"), а затем устанавливает вызовы, которые возражают setActor("Bill Murray").

2-е правило проверяет, что такое Актер. У меня есть 2 строки в этом втором правиле. if Actor == "Bill Murray" это вызывает действие setRating(10). А если actor == "unknown" setRating(8)

Первое правило срабатывает, как и ожидалось, и я могу напечатать getActor, чтобы показать, что это «Билл Мюррей», но во втором правиле всегда срабатывает действие actor == "unknown". Даже если в этом ряду я напечатаю getActor, он печатает «Билл Мюррей», но использует правило «неизвестно».

Когда объект возвращается из правил, у него есть Actor = Bill Murray, и все значения, установленные в правиле, являются «правильными», но правила, кажется, всегда используют исходный объект, который я создал вне правила, при оценке правил.

Есть ли что-то, что я должен добавить в таблицу решений или вызов, чтобы вызвать сервер правил drools для "обновления" объекта между таблицами правил?

Ответы [ 2 ]

1 голос
/ 07 июля 2016

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

modify($className){ setActor("Bill Murray")};

Оставьте первую строку под действием пустой.

0 голосов
/ 26 февраля 2011

Вы должны использовать update или modify метод, как описано в Drools docs (4.8.4.1, 4.8.4.2):

rule "modify stilton"
when
    $stilton : Cheese(type == "stilton")
then
    modify( $stilton ){
        setPrice( 20 ),
        setAge( "overripe" )
    }
end

это скажет движку, что объект был изменен и правилабудет повторно применен.

...