2014-12-07 46 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