2015-08-03 48 views
0

有沒有辦法通過程序更新drools中的事實? 我的意思,而不是像我可以以編程方式在流水中觸發事實更新嗎?

... 
then 
    $myFact.setNewValue("newValue"); 
    update($myFact); 

我可以定義一個函數,將採取我的事實,例如, RuleContext(我找不到它)或其他一些drools特定的接口來更新事實?

... 
    $myFact.setNewValue("newValue"); 
    myFunction($myFact, someDroolsInterface); 

而myFunction的會,然後調用使用someDroolsInterface的既定事實的更新(或有任何其他方式做到這一點的結果的一部分,但沒有在滴料有它的規則文件本身)?

這可能嗎?

感謝您的任何提示!

回答

0

一會兒搜索和調試後,我發現有

org.drools.core.spi.KnowledgeHelper 

(見例如http://javadox.com/org.drools/drools-core/6.2.0.Final/org/drools/core/spi/KnowledgeHelper.html

這種情況可以做插入()和update()除其他事項外。

我用它例如有點像這樣的規則制定使用總是暴露「kcontext」 RuleContext的(僞代碼!):

... 
then 
    myService.doSomeServiceCall(kcontext, $myFact1, $myFact2); 

在我的服務呼叫我,然後有一些輔助方法,像這樣:

protected void updateFacts(final KnowledgeHelper helper, final Object... facts) 
{ 
    for (final Object fact : facts) 
    { 
     helper.update(fact); 
    } 
} 

重要爲了這個工作,事實正確地實現了equals/hashCode方法,以便對這個事實進行查找(因爲我沒有事實句柄可用)。

相關問題