使用Drools提供错误处理和结果管理

使用Drools提供错误处理和结果管理,drools,Drools,我正在研究一个模块,其目的是处理Java异常并决定处理它们的策略。异常可能是我所知道的(明确的业务异常,如TransformationException)或更一般的环境因素(JMS错误、IO错误等) 插入到知识库中的事实都是同一个类,并包装(包含)一个异常 我想写一条规则,明确匹配我知道如何处理的异常(例如TransformationException),并有另一条规则捕获“其他所有内容” 在我看来,问题在于,对于包含TransformationException的事实,两个规则都将启动,并且输

我正在研究一个模块,其目的是处理Java异常并决定处理它们的策略。异常可能是我所知道的(明确的业务异常,如TransformationException)或更一般的环境因素(JMS错误、IO错误等)

插入到知识库中的事实都是同一个类,并包装(包含)一个异常

我想写一条规则,明确匹配我知道如何处理的异常(例如TransformationException),并有另一条规则捕获“其他所有内容”

在我看来,问题在于,对于包含TransformationException的事实,两个规则都将启动,并且输出将是不确定的

我该如何编写这样的排他性规则,而不依赖显著性来控制执行顺序(从我所读到的内容来看,这似乎是一种不好的做法)


我有一个我不满意的解决方案,结果取决于在我的.drl中定义规则的顺序

我建议对异常特定规则使用高显著性,而对一般规则使用低显著性。或者,您可以使用议程组先运行特定的规则,然后再运行catch all规则


为了防止多次执行,您可以在高显著性规则的操作中收回事实。

我建议对异常特定规则使用高显著性,对一般规则使用低显著性。或者,您可以使用议程组先运行特定的规则,然后再运行catch all规则


为了防止多次执行,您可以在较高显著性规则的操作中收回事实。

看看激活组,它们允许您将一组规则放入一个独占组中,以便最多触发一个规则。再加上默认规则的显著性较低,semms就可以在这里发挥作用。

看看激活组,它们允许您将一组规则放入一个独占组中,这样最多可以触发其中一个。再加上默认规则的显著性较低,semms可以在这里实现这一点