在Drools执行过程中,如果我在任何规则中得到任何异常,规则引擎应该跳过特定的规则,并执行知识库中的其余规则。
发布于 2019-01-16 03:41:34
如果规则的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的状态都是一致管理的。
https://stackoverflow.com/questions/54201880
复制相似问题