我正在开发一个为促销引擎系统运行Drools 5.5的项目。我在构建知识库时尝试了解编译步骤时遇到了一些麻烦。这个drl应该编译吗?
这是这种情况:我有一个drl在条件大小> = int的列表上执行收集(LHS)。 生成drl的系统,做错了,现在我有运行时异常。现在,我正试图理解这种情况下编译如何在drools上运行。
的事情是,在此收集,约束(大小> =的事情,这东西不是整数)不被Drools的5.5编译器验证,异常只会在运行时发生爆炸:
$COLLECT_ALL : ArrayList (size >= something)
from collect (Product (...))
但是,在drools 5.0.0上验证了相同的代码,并且我可以在创建知识库之前删除此规则。
我不知道这是一个错误还是只是错误理解LHS上的流口水。
无论如何,这是我的工作
KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder();
builder.add(ResourceFactory.newByteArrayResource(rule.getBytes()) , ResourceType.DRL);
if (builder.hasErrors()) {
createErrorMessage(builder);
}
从技术上讲,它不是一个有效的Java语句。 “某事”确实是某种东西。我知道这听起来很奇怪,但它只是文件中的一个词。看起来像一个变量,但从未宣布。例如:当COLLECT_ALL:ArrayList(size> = tag-xyz) from collect(Product(...))时,规则“XYZ”然后...' – VitorBtf
感谢您的澄清。 - 看起来和w.r.t有区别错误报告。 'Product'中的类似错误在编译时被标记。我在Drools用户名单上追求这一点。 – laune
请参阅我的答案的补充内容。 – laune