2010-09-09 4 views
3

Каков результат нескольких правил, имеющих одинаковую значимость? Является ли их порядок исполнения только тем порядком, в котором они указаны, или это неопределенное поведение - то есть они проверяются в произвольном порядке? Кажется, я не могу найти документацию о том, как это делается внутренне.Сознание в слюни

ответ

12

Короткий ответ заключается в том, что вы не должны полагаться на порядок правил, стреляющих в одну и ту же сторону - если они «конфликтуют» (т.е. оба имеют право стрелять). Правила, в которых нет значительности, - это всего лишь ноль, BTW.

Конечно, это детерминировано - это просто, что алгоритм может быть изменен между версиями (хотя это и не очень вероятно).

Это под общей областью «разрешения конфликтов», и об этом написано много. Я не могу найти текущую статью о стратегии Drools, но я считаю, что большая ее часть - «регентство» - то есть самый последний измененный/вставленный факт «выигрывает» - вернее, правила, относящиеся к самому последнему факту, победят. Если после всего этого он не может решить - обычно это порядок, в котором загружаются правила (что обычно совпадает с тем, как они записаны в файле). Если у вас должен быть заказ - используйте значительность или используйте поток правил или аналогичный, лучше не догадываться, как он будет работать.

+0

Меня не интересует это с точки зрения производства - я понимаю цели значимости, и я никогда не буду полагаться на определенную реализацию, уволившую их в определенном порядке. Мне просто интересно узнать, определено ли вообще поведение. Приветствую вас за ответ! – JBirch

+2

Согласно официальной документации JBOSS, правила со значением по умолчанию (или равными, но не по умолчанию) будут выполняться в произвольном порядке. Никогда не следует полагаться на это, если порядок действий важен. (http://docs.redhat.com/docs/en-US/JBoss_Enterprise_BRMS_Platform/5/html-single/JBoss_Rules_5_Reference_Guide/index.html#sect-Activations_Agenda_Conflict_Sets) – Zec

+0

Порядок выполнения изменился в какой-то момент во время Drools 5.x релизы. Мои правила срабатывали только в том случае, если исполнение произошло в определенном порядке, позор мне. К счастью, я был достаточно умен, чтобы писать модульные тесты, которые его подняли. –

1

Мой опыт работы с Drools 5.1 заключается в том, что он последний, в первую очередь. То есть правило, определенное последним в вашем drl, будет выполнено первым.

Но да, полагаясь на такое поведение не будет лучшая идея :)

2

сплетение алгоритм, используемый давность и специфичность условий.