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