当前位置: 首页 > 知识库问答 >
问题:

个别规则级别的异常处理-Drools

洪育
2023-03-14

如何在Drools中捕获和处理单个规则级别的异常?

目的是单个规则的异常不应影响其余规则的执行。

我知道我们可以在RHS中使用try catch,但是无论LHS或RHS是什么,我们都可以在更高的水平上进行控制吗?

像这样的东西:

fireAllRules( new DefaultAgendaEventListener() {
    @Override
        public void whenExceptionAtRule(Exception exception) {
            //handle exception when 
        }
})

共有1个答案

彭涵衍
2023-03-14

首先,您需要实现组织。kie。应用程序编程接口。运行时。规则ConsequenceExceptionHandler接口

package sample;

public class MyConsequenceExceptionHandler implements ConsequenceExceptionHandler {

    @Override
    public void handleException(Match match, RuleRuntime rr, Exception excptn) {
        //Do whatever you want
    }

}

然后,这完全取决于您如何创建KieBase。如果您手动执行(不使用kmodule.xml文件),那么您需要创建一个KieBaseConfiguration来指定您要使用什么类来处理异常:

KieBaseConfiguration kconfig = new RuleBaseConfiguration();
kconfig.setProperty(ConsequenceExceptionHandlerOption.PROPERTY_NAME, "sample.MyConsequenceExceptionHandler");

然后在创建KieBase时使用此对象:

KieSession ksession = kcontainer.newKieBase(kconfig).newKieSession();

我找不到在kmodule中注册处理程序的声明方式。但xml文件。

希望有帮助,

 类似资料:
  • 问题内容: 我有此代码- 编译器将如何实际实现这一点。实际在汇编代码中生成的异常检查在哪里? 更新 我知道上面的代码如何转换为 bytecode 。字节码仅将try-catch转换为相应的try- handler块。我对它将如何转换为jvm进行汇编和/或处理感兴趣。 问题答案: 试捕法的成本 大致来说,block不会向结果程序集中添加任何异常检查代码。只要不引发异常,它基本上是无操作的。所有缓慢的

  • 我有这个密码- 编译器将如何实现这一点。在生成的汇编代码中,对异常的检查实际放在哪里? 更新 我知道上面的代码是如何翻译成字节码的。字节码仅将try-catch转换为相应的try-handler块。我感兴趣的是JVM将如何将其转换为汇编/与或处理。

  • 本文向大家介绍Java有效处理异常的三个原则,包括了Java有效处理异常的三个原则的使用技巧和注意事项,需要的朋友参考一下 异常之所以是一种强大的调试手段,在于其回答了以下三个问题:      1、什么出了错?      2、在哪出的错?      3、为什么出错? 在有效使用异常的情况下,异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪“抛出,异常信息回答了“为什么“会抛出,如果你的异常没

  • 我正在阅读关于reinterpret_cast的笔记,它是混淆现象(http://en.cppreference.com/w/cpp/language/reinterpret_cast)。 我写了代码: 我认为这些规则在这里不适用: T2是对象的(可能是cv限定的)动态类型 T2和T1都是指向相同类型T3的指针(可能是多级的,可能在每个级别都是cv限定的)(因为C11) T2是一个聚合类型或并集类

  • 问题内容: 在Java中,如果特定的代码行导致程序崩溃,则将捕获异常并继续执行程序。 但是,在C ++中,如果我有一段导致程序崩溃的代码,例如: 然后程序仍然崩溃,并且没有捕获到异常。 那么C ++中异常处理的意义是什么?我误会了吗? 问题答案: 崩溃的行正在取消引用无效的指针。在C ++中,这不会引发异常。相反,它是未定义的行为。 C ++中不存在空指针异常,这与Java会抛出空指针异常不同。相

  • 有人可以解释我什么时候使用关键字 throw new 有用.而不是在方法的签名旁边使用抛出? 我知道当方法抛出Checked Exception时。Java迫使我们通过将Exception处理到try-catch块中,或者通过在签名旁边的关键字throws指定将在其他地方完成,从而直接在方法中处理它。 然而,我很难理解何时使用关键字throw new是有用的,以及为什么。它与处理未选中的异常有关吗