2011-03-17 51 views
0

我们使用Drools和用户可以更新/编辑规则的界面。那些规则然后被存储(并且版本化)在数据库中。此后的规则是从数据库中再次得到并通过以下方式逐一添加: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个节点)。随着规则数量的增加,KnowledgeBase更新花费的时间越来越长(编译所有这些规则),并且在此期间不能检查规则。因此,从用户的角度来看,系统仍然处于停滞状态。

似乎不存在选择性刷新规则的可能性 - 这是正确的吗?如果是,那么处理这种情况的最好方法是什么?首先想到的第一个想法是并行使用两个知识库...

回答

0

KnowledgeBase API具有删除规则/包并添加包的方法。因此,要完成此操作,您可以删除要更新的规则,然后将更新后的版本插入到知识库中。如果您有任何尚未调用dispose()方法的有状态会话,那么KnowledgeBase的更改也应该推送给它们。