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

如何读取Drools内存以检测部分匹配的规则

秦斌
2023-03-14

我希望能够以这样一种方式读取Drools内存,即我能够检测到哪种条件匹配,即使最后规则没有触发。

假设我有这个规则:

rule "MyRule"
when
   FirstFact(condition == "str")
   SecondFast(anotherCondition > 30)
then
...
end

如果我在内存中只插入一个对象“FirstFact”,并调用fireAllRules(),则不会触发该规则。但我还是想找出这条规则的第一个条件是否匹配。

我理解这是一个奇怪的要求,可能需要一些时间来开发,因为它可能并不简单,但如果有办法做到这一点,我很感兴趣。

我正在考虑访问Drools内存并访问Rete树中包含的所有条件,但我不确定这是否是一个好方法,甚至不可能。

谢谢

共有1个答案

拓拔君博
2023-03-14

由于RETE的工作方式,您试图做的是不可能的。请阅读另一个问题,了解并想出一个可能的解决方案:Drools 7,规则激活时的事件侦听器(即使部分匹配)

希望有帮助,

 类似资料:
  • 问题内容: 我有一个.DRL文件,其中有10条规则。插入事实后,可能会匹配一些规则-如何找出以编程方式匹配的规则? 问题答案: 请注意,此答案对不超过5.x的Drools版本有效。 如果您已升至6或更高,请查看@ melchoir55的修改后答案。我还没有亲自测试过,但是我相信它会起作用。 若要跟踪规则激活,可以使用AgendaEventListener。下面是一个示例,可在此处找到: https

  • 我使用Drools 7.8和DefaultAgendaEventListener来处理事件。 我试图在规则被激活(即使部分匹配)时处理该事件,但迄今为止该类处理的每一个事件都失败了。例如,假设我有一条规则: 我想在满足这3个条件(A、B或C)中的任何一个时处理事件,即使结果没有被触发,但在Drools文档中很难找到正确的方法来执行此操作。

  • 这肯定不总是一件好事,例如,未分配的内存可能会被取消映射。然而,一定有什么东西能让这一切奏效。我的一些假设: OSX不仅保证它的分配是16字节对齐的,而且还保证分配的“量程”是16字节的块。换句话说,分配5个字节实际上会分配16个字节。分配20个字节实际上将分配32个字节。 在编写asm时读取数组末尾本身并无害,因为这不是未定义的行为,只要它在范围内(在页面内?)。 实际原因是什么?

  • 我有一个使用log4j2的Spring启动应用程序,它的XML配置文件在资源文件夹中。 但这个想法是,首先应用程序在战争之外查找配置文件,如果它不存在,则从资源文件夹中获取配置文件。 这种行为有可能实现吗? 更新:我在我的查询中添加了更多细节!!我的具体案例如下:我有以下环境:spring boot(2.2.4)Java 1.8 log4j2关于Linux(CentOS) application.

  • 我们使用的是Drools Planner 5.4.0。我们希望对java应用程序进行概要分析,以了解是否可以提高性能。是否有一种方法可以描述一个规则需要评估多少时间?我们使用了很多eval(....)我们的“平均每秒计算次数”接近37。删除所有eval(...)我们的“平均每秒计算次数”保持不变。