如何处理drools异常,以便单个规则中的异常不会影响整个执行?
在Drools执行期间,如果我在任何规则中遇到任何异常,规则引擎应该跳过特定规则并执行知识库中的其余规则 如果规则的RHS可能触发异常,则由规则作者以这种方式编写RHS以处理异常 这也是因为例外情况可能发生在RHS主体的任何点上;RHS的其余语句可能会错过在触发异常的操作之后使用新状态更新工作内存的机会,从而从业务/领域/知识的角度来看工作内存处于不一致的状态,如下例所示:如何处理drools异常,以便单个规则中的异常不会影响整个执行?,drools,redhat-brms,Drools,Redhat Brms,在Drools执行期间,如果我在任何规则中遇到任何异常,规则引擎应该跳过特定规则并执行知识库中的其余规则 如果规则的RHS可能触发异常,则由规则作者以这种方式编写RHS以处理异常 这也是因为例外情况可能发生在RHS主体的任何点上;RHS的其余语句可能会错过在触发异常的操作之后使用新状态更新工作内存的机会,从而从业务/领域/知识的角度来看工作内存处于不一致的状态,如下例所示: rule "Process order" when $o : Order() then processSomeOr
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的状态都是一致的