首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理drools异常,使单个规则中的异常不会影响整个执行?

如何处理drools异常,使单个规则中的异常不会影响整个执行?
EN

Stack Overflow用户
提问于 2019-01-15 23:24:51
回答 1查看 195关注 0票数 0

在Drools执行过程中,如果我在任何规则中得到任何异常,规则引擎应该跳过特定的规则,并执行知识库中的其余规则。

EN

回答 1

Stack Overflow用户

发布于 2019-01-16 03:41:34

如果规则的RHS可能触发异常,则由规则创建者以这种方式编写RHS来处理异常。

这也是因为异常可能发生在RHS主体的任何点上;RHS的其余语句可能会错过在可能已触发异常的操作之后用新状态更新工作存储器的机会,因此从业务/域/知识的角度来看,工作存储器处于不一致的状态,如以下示例所示:

代码语言:javascript
复制
rule "Process order"
when
  $o : Order()
then
  processSomeOrder($o); // some exception might occur here
  ...
  delete($o);
end

如果不进行异常处理,这可能会导致多次处理订单,结果总是一遍又一遍地出现异常;根据业务/域/知识的观点,规则可能会修改如下:

代码语言:javascript
复制
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的状态都是一致管理的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54201880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档