Как обрабатывать исключения drools, чтобы исключение в одном правиле не влияло на все выполнение?

Лучшим способом (рекомендуется) является использование пакета java.util.Concurrent. Используя этот пакет, вы можете легко избежать этого исключения. см. Модифицированный код

public static void main(String[] args) {
        Collection<Integer> l = new CopyOnWriteArrayList<Integer>();

        for (int i=0; i < 10; ++i) {
            l.add(new Integer(4));
            l.add(new Integer(5));
            l.add(new Integer(6));
        }

        for (Integer i : l) {
            if (i.intValue() == 5) {
                l.remove(i);
            }
        }

        System.out.println(l);
    }
0
задан pai 15 January 2019 в 15:24
поделиться

1 ответ

Если 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 управляется последовательно.

0
ответ дан tarilabs 15 January 2019 в 15:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: