2011-03-17 137 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的更改也應該推送給它們。