问题标签 [drools-fusion]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Drools 规则语言:类字段的奇怪行为
我最近注意到流口水规则的一些奇怪行为。我有类 HeartRate,它有以下字段:
我的规则文件如下:
我想将字段更改heartRate
为heartrate
并且我也更改了规则中的字段名称,以便我的新规则现在是:
但这会产生错误,即 drools can't resolve the field heartrate
。但是,当我将规则改回原来的规则时,heartRate
尽管这样的字段不再存在,但它仍然有效。我收到以下错误:
java - Drools Fusion:衡量性能
我想根据规则的数量和规则的复杂性来衡量口水的性能。因此,我需要测量处理事件所需的时间。我想写一个这样的简单测试:
我面临的问题是这不起作用,因为您可以插入所需的事件,而流口水稍后会处理它们。所以这部分的时间显然总是少于一秒。long stop = System.currentTimeMillis()
所以我的问题是在处理完所有事件后如何调用?
java - Drools fusion:自动生成规则
我正在使用 drools fusion,我想根据实施的规则数量来测试这个 cep 系统的性能。我现在有一个带有 .drl 扩展名的简单规则文件。我想动态生成大约 1000 条规则。那么如何在不让他们在 .drl 文件中一对一创建的情况下自动完成呢?
java - Drools - 停止规则结果执行
我们正在使用 drools 并允许我们的用户输入他们自己的 drools 规则条件和后果。然而,为了让整个 drools 的东西更可靠,我们需要确保没有无限循环或其他阻塞事物阻塞整个系统。
对于规则循环(规则 A -> 规则 B -> 规则 A -> ...),我们采取了措施。但是,仍然可以使用类似的东西
问题是我们无法使用黑名单或其他东西来避免这一切,所以我们需要一个流口水的措施来做到这一点。
在当前 KnowledgeSession 上使用session.halt()
不会中止结果部分。session.dispose()
即使会话已经死了,结果也会运行,这不是我们需要的。
我也没有找到一些“最大执行时间”,这可能会限制结果执行在终止之前所允许的时间。
还尝试向 beforeActivationFired 添加一个钩子,它启动一个线程,该线程等待 10 秒,然后使用agendaItem.cancel()
以及从 kBase 中删除规则。无济于事,规则后果继续运行。
任何想法都会有所帮助。
java - Drools 6 EventFactHandle StackOverflowError
我有一个不断触发所有规则的 WEB 应用程序,在运行几分钟(甚至几天)后,我在 org.drools.core.common.EventFactHandle.increaseActivationsCount(EventFactHandle.java:170) 处得到了 java.lang.StackOverflowError。我看到了那部分代码,看起来有一个递归方法调用,但我不确定为什么会发生这种情况或最糟糕的事件,如何避免它。我使用的drools版本是6.3.0 Final
java - Drools 融合多流和伪时钟
我目前正在研究我的硕士论文,其中涉及使用 Drools Fusion 处理来自多个 XML 文件流的事件(所以我将每个文件作为流“重放”)。这些文件是一场足球比赛,其中 GPS 传感器连接到球员身上,监测他们的加速度和速度以及其他东西,如球员负荷等。
每个 XML 文件都包含事件实例,说明 ID、开始时间、结束时间和代码,如下所示:
我有 9 个这些文件都需要同时处理并将这些事件同时馈送到引擎中。我当前的实现是一个 JAXB 解组器将这些事件馈送到流中,但不知道如何同时执行它(即:在每个流中馈送第一个事件,然后在每个流中馈送第二个事件等)。我正在考虑在实现的那部分使用线程,除非它们是我在 Drools 中错过的另一个工具来帮助做到这一点。但是搜索得相当彻底,并且没有同时处理多个流的全面示例。
我的另一个问题是关于 Pseudoclock。因为我有这 9 个不同的流,事件发生在不同的时间,所以我无法在每次插入后提前时间,因为每个流中的每个事件都发生在不同的时间,因此,这些事件不会排列。所有这些流开始的时间是相同的。例如,如果我在 XML 中的实例 1 发生在 1.51 的持续时间,并且来自另一个流的另一个事件的持续时间为。说。4 秒,假设我要推进这两个事件,那么它们将彼此不同步。
但是,我所有的时间相关数据都存在于每个流中。开始时间是 19:02:31,每个事件在通过“结束”时间戳开始后的流中都有一个时间戳(以秒为单位),每个事件的持续时间为(结束时间戳 - 开始时间戳)。我需要对这些流进行的处理涉及获取这些加速事件并将它们与其他流相关联,只要 2 个或更多玩家以大致相同的持续时间/时间间隔以相同的速率加速。
任何人都可以给我任何指示或帮助吗?总而言之,我需要知道一种将流同时插入引擎的更好方法,并且需要知道我是否需要伪时钟来实现/处理。我几乎是编程的初学者,所以我只想让系统运行。
非常感谢!
斯图。
java - Drools Fusion 时间运算符持续时间错误/声明事件
我一直在尝试处理我的 java bean 中的持续时间属性,但它似乎没有被处理。我尝试以两种方式声明它:第一种是获取现有类并将其声明为 DRL 中的事件。这是我的代码。
但我不断收到错误消息:“java.lang.RuntimeException:创建 KieBase 时出错 [Message [id=1, level=ERROR, path=Ruleset.drl, line=5, column=0 text=Error processing @duration for TypeDeclaration 'com.sample.Instance':无法访问字段 'durationTime']]"
我声明它的第二种方式是在我的 Java 类中:
而且它仍然无法正常工作,因为我遇到了同样的错误。在 DRL 中,如果我将对象声明为没有持续时间属性的事件,并且将其也声明为对象内的事件角色,即使使用持续时间属性,我也不会收到错误消息。在底部使用时间规则运行它,但是它不会触发。这似乎是一个应该触发的基本规则。
但是,如果我删除 DRL 中声明的事件类型,我会收到错误消息。无需接触 java bean。
摘要:在 java bean inc 中声明了事件类型。持续时间属性:不喜欢持续时间属性/无法访问它。在现有类 inc 的 DRL 中声明它。持续时间属性。也不喜欢。当我没有触及 Java bean 事件声明(包括持续时间)但在 DRL 中声明了没有持续时间属性的事件类型时,运行没有错误。但是,当它们没有错误时,基本时间运算符不起作用。
很困惑。可能做错了很多事情。有人可以帮忙吗?谢谢。
drools - 如何提高流口水规则性能
我有大约 50 个从 xsl 文件生成的规则文件。在每个 drl 文件中,我每个都有大约 500 条规则。每个规则就像查找包含某个给定字符串、以某个给定字符串开头或结尾的字符串。目前我们只有一个知识库,其中所有规则都已加载。当前运行的规则对我们来说是一个性能损失,它占用了我们大部分的执行时间。每秒将有数千个请求访问服务,少量的性能改进将使我们受益。有什么办法可以提高性能。我想的一种方法是为每组规则创建不同的知识库并调用它们。这是一种正确的做法,还是我们有任何其他优化规则的最佳方法。
规则示例:
提前致谢
drools - 找不到 kbase,要么它不存在,要么 kmodule.xml 中有多个默认 kbase
我正在使用 Kie 工作台 6.3.0 创建规则。我正在使用 kie 服务器运行时。我在 kie-wb 中创建了项目并添加了 kie-base、包,并已从项目编辑器设置为流模式。以下是生成的 kmodule.xml:
部署项目时出现以下错误:
请帮我解决这个错误。谢谢