Слюни вызывают одно правило для каждого элемента в списке ввода для StatelessKieSession - PullRequest
0 голосов
/ 29 августа 2018

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

Я использую решение, которое установило Sequential = true и определило все правила как часть одной ACTIVATION-GROUP.

Когда я запускаю механизм правил drools, используя ниже, он просто оценивает первый элемент ввода, а другие игнорируются. Мне нужно оценить не более 1 правила для каждого элемента ввода (порядок правил, определяемый отличительными особенностями).

kieStatelessSession.execute(inputList)

Я могу заставить это работать, отправляя по одному элементу за раз в kieStatelessSession, но предпочитаю выполнять все сразу.

Я использую Drools verison 6.5.0.FINAL и Java 7.

1 Ответ

0 голосов
/ 29 августа 2018

В Drools нет встроенной поддержки того, чего вы пытаетесь достичь. Если вы хотите, чтобы ваши правила оценивались один раз для каждого факта, вам придется кодировать их самостоятельно.

Один из подходов мог бы заключаться в том, чтобы при обработке одного из входных данных отмечать факты другого типа:

declare Marker
  fact : Object
end

//Bellow are the rules that should be coming from your decision table.
//Each rule will do whatever it needs to do, and then it will create a 
//Marker fact for the fact that was processed.
//These rules now include a "not" Conditional Element to avoid a fact to be
//evaluated more than once.

rule "Rule 1"
salience 100
when 
  $fact: Object(...)   //your conditions
  not Marker(fact == $fact)
then
  //...   Your logic
  insert(new Marker($fact)); 
end

...


rule "Rule 50"
salience 50
when 
  $fact: Object(...)   //your conditions
  not Marker(fact == $fact)
then
  //...   Your logic
  insert(new Marker($fact)); 
end

Надеюсь, это поможет,

...