Как обработать исключение слюни, чтобы исключение в одном правиле не влияло на все выполнение? - PullRequest
0 голосов
/ 15 января 2019

Во время выполнения Drools, если я получу какое-либо исключение в каком-либо правиле, механизм правил должен пропустить определенное правило и выполнить остальные правила в базе знаний.

1 Ответ

0 голосов
/ 15 января 2019

Если RHS правила может вызвать исключение, то автор правила должен написать RHS таким образом, чтобы обработать исключение.

Это также потому, что исключение может произойти в любой точке тела RHS; остальные операторы RHS могут упустить шанс обновить рабочую память новым состоянием после операций, которые могли вызвать исключение, оставив рабочую память в несовместимом состоянии с точки зрения бизнеса / домена / знания, так как в следующем примере:

rule "Process order"
when
  $o : Order()
then
  processSomeOrder($o); // some exception might occur here
  ...
  delete($o);
end

Без обработки исключений это может привести к многократной обработке заказа, всегда заканчивающемуся исключением снова и снова; в зависимости от точки зрения бизнеса / домена / знания правило может быть пересмотрено следующим образом:

rule "Process order"
when
  $o : Order()
then
  try {
    processSomeOrder($o); // some exception might occur here
  } catch(Exception e) {
    forwardOrderToHumanForManualProcessing($o, e);
  }
  ...
  delete($o);
end

В этом примере решение по домену / бизнесу решает, как обработать потенциальное исключение, возникающее во время стандартной обработки, и в случае исключения выполнить другую бизнес-операцию. В любом случае состояние WM управляется последовательно.

...