更改DSLR文件后如何更新规则?

时间:2016-06-21 20:10:55

标签: java drools

我正在使用DROOLS编写程序。为了编写规则,我使用DSL。我有个问题。更改DSLR文件(删除,添加)后更新工作内存中的规则?添加规则后,新规则不会出现在工作内存中。

public class Drools {
private KnowledgeBase knowledgeBase;

public Drools() {
    knowledgeBase = createKnowledgeBaseFromDSL();
}

private KnowledgeBase createKnowledgeBaseFromDSL() {
    KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder();
    builder.add(ResourceFactory.newClassPathResource("rules/simple.dsl"), ResourceType.DSL);
    builder.add(ResourceFactory.newClassPathResource("rules/simple.dslr"), ResourceType.DSLR);

    if (builder.hasErrors()) {
        throw new RuntimeException(builder.getErrors().toString());
    }

    KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();
    knowledgeBase.addKnowledgePackages(builder.getKnowledgePackages());

    return knowledgeBase;
}

public void fireAllRules() throws IOException {
    Properties properties = new Properties();
    try (BufferedReader fileReader = Files.newBufferedReader(Paths.get("src/main/resources/setting.properties"))) {
        properties.load(fileReader);
        StatefulKnowledgeSession session = knowledgeBase.newStatefulKnowledgeSession();
        try {
            HttpReader reader = new HttpReader(properties.getProperty("url"));
            session.insert(reader);
            session.fireAllRules();
        } finally {
            session.dispose();
        }
    }
}

}

1 个答案:

答案 0 :(得分:0)

更新DSL或DRL或DSLR文件不会自动更改正在进行的会话。

Drools 5有一项监控目录并自动重建知识库和更新会话的服务。但这在Drools 6中并没有继续下去。

做什么取决于您的使用案例。您可以使用Java功能轻松监视目录。然后,重建与您拥有的代码一样。然后,我认为,最好的方法是开始一个新的会话。但这取决于您的数据如何到达以及是否保留在工作记忆中。