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

Drools异常LHS,确定失败的规则

章阳波
2023-03-14

在有人发疯之前,这件事已经被报道过了,还不是很清楚。首先,我们使用Drools 6.5。接下来,我负责运行引擎的框架,而不是规则。第三,我需要实时报告失败的规则。RHS不成问题,已经解决了。LHS是问题,NPE,除以零,等等,等等。

显然,任何和所有异常都被捕获并相应地处理。据我所知,没有足够的信息来确定失败的规则。我尝试注入一个全局并将其设置为第一stmt,但似乎没有从LHS工作内存复制到应用程序内存。

我可以利用规则制定者的一些要求...有限。我可以在运行时注入stmts(当我加载规则时),但我宁愿不这样做。

工作项目将是多种多样且不可靠的。处理速度必须非常快。规则将是数百到数千条,并且可能接近实时更新,或者可能是动态更新是一个更好的描述。

是否有可用的侦听器可以在LHS评估之前调用?(我对此表示怀疑,但认为我最好问一下)。

ErrorListener会很好,我尝试了结果异常处理程序,但没有成功。是否还有我遗漏的错误处理程序?

我假设JBPM引擎具有相同的约束,是这样吗?这也需要在框架中运行。

谢啦

共有1个答案

能钟展
2023-03-14

约束不会在规则的上下文中进行评估,而是在网络的上下文中进行评估。

如果你不给规则制定者一根绳子,他们将无法上吊。如果您不为他们提供运行到NPE或除法为零的Java类,他们将无法在约束表达式中这样做。(好吧,他们可能仍然能够显式地写出除数为零的表达式,但那又怎样呢。)

如果您围绕插入调用编写处理程序,您捕获LHS侧异常的机会有限。但是,您不知道是哪个规则。(如果你知道,你会怎么做?打电话给海军陆战队?)

使用规则而不进行测试就像使用任何其他软件而不进行测试一样。

 类似资料:
  • 如何在Drools中捕获和处理单个规则级别的异常? 目的是单个规则的异常不应影响其余规则的执行。 我知道我们可以在RHS中使用try catch,但是无论LHS或RHS是什么,我们都可以在更高的水平上进行控制吗? 像这样的东西:

  • 声纳5.0.1(应用) Sonar-Runner 2.4(gradle插件) 等级2.3 Java 8(要分析的项目) Java插件3.1(声纳插件) 有没有人有什么想法?

  • 我尝试运行这个gradle任务(通过gradlew) 它使用cucmber jvm 并收到此错误 当我从cmd中的同一路径运行同一行时: 更新1: 这个cmd在shell控制台中工作: ./构建/发行版/WebLarge测试/bin/WebLargeTests-f html:构建/报告/cucumber/-f json:构建/报告/cucumber/report.json--胶水com.waze.

  • 我使用SpringDataJPA和Hibernate作为PostgreSQL上的持久性提供者。我试图提供悲观锁定: 我尝试从两个线程中调用< code>findOneAndLock。我认为,如果< code >线程A锁定了对象,那么< code >线程B应该等到锁被释放。而是< code >线程B抛出< code > org . spring framework . ORM . objectopt

  • AGPBI:{“kind”:“error”,“text”:“Android资源链接失败”,“sources”:[{}],“original”:“error::AAPT:D:\Android basics kotlin cupcake app starter\app\build\intermediates\processed\u res\debug\out\resources-debug.ap\:错