我们将Drools与用户可以更新/编辑规则的界面结合使用。然后将这些规则存储(并版本化)在数据库中。之后,再次从数据库中获取规则,并按以下方式逐个添加:
for (Rule rule ...) {
knowledgeBuilder.add(ResourceFactory.newByteArrayResource(rule.getRuleContent().getBytes()), ResourceType.DRL);
if (kbuilder.hasErrors()) { throw Error... }
}
kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(knowledgeBuilder.getKnowledgePackages());
我们有几百个规则和规则检查吞吐量也是几百个规则/秒(在2个节点上)。随着规则数量的增加,此知识库更新需要更长时间(编译所有这些规则),并且在此期间不能检查任何规则。因此,从用户的角度来看,系统仍处于静止状态。
似乎不可能有选择地刷新规则 - 这是正确的吗?如果是,那么处理这种情况的最佳方法是什么?想到的第一个想法是并行使用两个知识库...
答案 0 :(得分:0)
KnowledgeBase API具有删除规则/包以及添加包的方法。因此,要完成此操作,您可以删除要更新的规则,然后将更新的版本插入知识库。如果你有任何状态会话没有调用dispose()方法,那么知识库的更改也应该被推送给他们。