java - 口水融合 : Rule with temporal operator "after" not triggering after update to 6. 0.0.CR4

标签 java maven drools drools-fusion

我最近将 Drools 集成到了我的事件驱动项目中。我在那里使用以下 Maven Artifact :kie-internalkie-apidrools-coredrools-compiler。它们都有一个版本 6.0.0.Beta3

这是我的代码:

try {
KnowledgeBase kbase;
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("rules.drl"), ResourceType.DRL);
if (kbuilder.hasErrors()) {
    System.out.println(kbuilder.getErrors().toString());
}

KieBaseConfiguration conf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
conf.setOption(EventProcessingOption.STREAM);
kbase = KnowledgeBaseFactory.newKnowledgeBase(conf);
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());

KieSession ksession = kbase.newKieSession();

ksession.insert(new EventA());
ksession.fireAllRules();

Thread.sleep(8000);
ksession.destroy();
} catch (InterruptedException ex) {
System.err.println(ex.getMessage());
}

规则:

declare EventA
@role( event )
end
declare EventB
@role( event ) 
end

rule "Timeout EventA"
salience 500
when
$a : EventA()
not(EventB(this after[0,4s] $a))
then
System.out.println("Retracting EventA: " + $a);
retract($a);
end

问题是,在我将 drools 依赖项更新到版本 6.0.0.CR4(最新)后,超时规则不再触发......也许我错过了一些东西或者这是一个错误?

最佳答案

查看“事件的内存管理”部分 http://docs.jboss.org/drools/release/6.0.1.Final/drools-docs/html/DroolsComplexEventProcessingChapter.html#d0e10244

我怀疑推断的过期偏移正在撤回事件,从而不会触发超时规则。

关于java - 口水融合 : Rule with temporal operator "after" not triggering after update to 6. 0.0.CR4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19143594/

相关文章:

Drools 创建规则(DRL)以编程方式在 drools-distribution-6.5.0.Final 中不起作用

java - RCP 3 - 锁定工具栏菜单贡献

java - 从 SpringMVC Liferay portlet 调用 jsp 的问题

java - 生成一个大的字符串列表到控制台

maven - 如何使用 maven build-helper-maven-plugin 附加没有类型的额外二进制 Artifact

java - 如何使用 Maven Enforcer 插件?

java - Drools 嵌套聚合

java - 如何在 Java 代码中保留 C++ 对象?可能的?

java - Maven - 在 intelliJ 中正确构建不同语言的模块

java - Drools 适用于我的场景吗?如果不是还有什么?