我正在开发一个为推广引擎系统运行 Drools 5.5 的项目。我在构建知识库时试图理解编译步骤时遇到了一些麻烦。
就是这种情况:我有一个 drl,它在条件大小 >= int 的列表上执行收集(LHS)。生成 drl 的系统做错了,现在我遇到了运行时异常。现在,我试图了解在这种情况下,流口水的编译是如何工作的。
问题是,在这个集合中,约束(size >= something ,其中 something 不是整数)没有被 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);
}