2013-05-13 142 views
0

我是新來的流口水。我只想了解如何在運行時動態更新規則。由我給輸入我已經更新.drl規則文件的時間動態加載DROOLS中的規則

while(true){ 
    session = fetchStatefulSession();//Some method to get drools session 
    system.out.println("enter text"); 
    //Some code to read input 
    session.fireAllrules(); 
} 

現在: 考慮Drools - Ability to define rules at runtime?

我寫了一個代碼。即使在此之後結果相同,

session.fireAllrules(); 

和以前一樣。這是規則的變化沒有體現出來。

我不確定這是正確的使用方式,動態加載規則。請給我建議

感謝 琳

回答

0

您的代碼只得到它仍然使用相同的.drl文件中的會話。您的代碼還需要包含加載.drl文件。

knowledgeBuilder.add(ResourceFactory.newClassPathResource(rulesFile, YourClass.class), ResourceType.DRL); 

但是我仍然懷疑它是否可行,因爲在運行時加載文件很容易出錯並且難以維護。

+0

感謝Mawia,但是這不是高可用性預期的業務應用程序通過此更新其業務邏輯流?或者他們只是停止服務器 - >更新的規則 - >並去啓動服務器?請幫助我瞭解如何使用Drools來改變業務流程Thanks-Chakri – Chakri 2013-05-13 09:42:14

+0

如果您需要動態流口水,那麼請去Drools Guvnor。在Guvnor中設置整個事情很複雜,但如果這是確切的要求,它可能是有用的。 – Mawia 2013-05-13 09:45:57

+1

**由於Guvnor通過釋放它們來改變它們,KnowledgeAgent **可以不斷更新規則。 – 2013-05-14 06:58:03