Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理drools异常,以便单个规则中的异常不会影响整个执行?_Drools_Redhat Brms - Fatal编程技术网

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

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

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

如果规则的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的状态都是一致的