2013-04-12 13 views
0

我正在使用drools專家5.4.0.Final,我動態創建規則DRL的情況下,將其添加到知識庫和解僱規則。 我想在稍後的時間點(在添加DRL後)禁用/啓用規則。要做到這一點,我想刪除從知識庫規則禁用,像這樣:NullPointerException在org.drools.reteoo.ReteooBuilder.removeRule(ReteooBuilder.java:252)

KnowledgeBase sessionBase = kSession.getKnowledgeBase(); 
    sessionBase.removeRule(RULE_PACKAGE_NAME, name); 

也能正常工作的第一次。

於是,我再次加入DRL,像這樣啓用規則:

kBuilder.add(ResourceFactory.newByteArrayResource(rule.toDrl().getBytes()), 
       ResourceType.DRL); 
    kBase.addKnowledgePackages(kBuilder.getKnowledgePackages()); 

然後,當我再次關閉,我得到以下異常:

Caused by: java.lang.NullPointerException 
at org.drools.reteoo.ReteooBuilder.removeRule(ReteooBuilder.java:259) 
at org.drools.reteoo.ReteooRuleBase.removeRule(ReteooRuleBase.java:459) 
at org.drools.common.AbstractRuleBase.removeRule(AbstractRuleBase.java:1107) 
at org.drools.common.AbstractRuleBase.removeRule(AbstractRuleBase.java:1085) 
at org.drools.impl.KnowledgeBaseImpl.removeRule(KnowledgeBaseImpl.java:208) 
    ... 

顯然,這個問題已經在早期版本的流口水中被使用過。 任何幫助,非常感謝。謝謝。

回答

0

我的壞..出事了我的申請。 我仍然在5.4.0.Final上,並且自從我在每次添加新規則時在知識構建器中開始記錄規則名稱時,NPE都消失了! 感謝您的幫助。

+0

如果唯一的區別是記錄規則的名稱,這並不一定指向您的應用程序中的錯誤。這可能是某種競爭條件,而不是日誌記錄本身,而是有助於做更多的工作(日誌記錄)造成的延遲。如果我是你,我會嘗試追蹤它並瞭解發生了什麼。 –

+0

5月我會研究這個 我也觀察到,這是一個特定的情況導致這個 當我創建會話後,我知識庫添加規則,它工作正常 - 沒有例外 當我創建會話第一(當然是有狀態的),然後爲知識庫添加規則,它崩潰。 –

0

嘗試5.5.1-SNAPSHOT,他們改變了規則去除算法很多(現在是迭代的,以前是遞歸的)。這可能解決了問題。

編輯:是不是 5.5.0.Final,它只是在5.5.1-SNAPSHOT

+0

5.5.0.Final也給NPE:( 雖然在不同的行號:252 –

相關問題