2014-12-07 50 views
0

爲了更好的可維護性,我想將業務邏輯與Web應用程序(Spring MVC + Hibernate)分開,我不想重新啓動服務器以進行業務邏輯更改。如果我修改DRL文件進行業務變更,流口水引擎是否會選擇最新的DRL?Drool採取更新後的規則

我做了一個測試應用程序,但更新的DRL文件沒有加載到'KnowledgeBase'中。有沒有辦法在Drools引擎中加載更新的DRL /規則而無需重啓服務器?

Account.java

public class Account { 
private Integer balance; 
    // setter & getter 
} 

並且測試程序公頃 S:

KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); 
    kbuilder.add(ResourceFactory.newClassPathResource("myrule.drl"), ResourceType.DRL); 
    KnowledgeBase kbase = kbuilder.newKnowledgeBase(); 

    StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession(); 
    Account account = new Account(1000); 
    account.withdraw(500); 
    ksession.execute(account); 

而DRL是

rule "belowLimit" when $account : Account(balance < 700) then System.out.println("Notify user"); end

回答

1

Drools 5.x版本(正如您明顯使用的那樣)包含Change Sets,它定義要觀察更改的目錄或文件,以便知識庫將自動重建,此後開始的會話可能反映新的知識庫。

可以在文檔中找到詳細信息請參閱「使用變更集進行配置知識庫」部分及其後續部分。在這裏重複這一切真的太過分了。

+0

謝謝laune。讓我嘗試 – Tony 2014-12-07 14:51:38