Drools 6.0在运行时动态加载规则

时间:2014-05-08 13:05:12

标签: java drools

我想在运行时加载drl文件。我发现的帖子包括这个版本5.0的one,但我无法弄清楚如何为drools 6.0版做这件事。

3 个答案:

答案 0 :(得分:3)

在Drools 6中,您的规则包已部署到Maven。提供KieScanner,您可以将其附加到KieContainer。这将按照定义的时间间隔轮询您的存储库,以查看是否已更新软件包,如果是这种情况,则下载最新软件包。

Drools文档中提供了有关如何定义KieScanner(包括代码示例)的完整说明:

https://docs.jboss.org/drools/release/latest/drools-docs/html/ch04.html

答案 1 :(得分:-1)

我使用了来自这两个文档的信息:

我已经推出了这个代码段,它将/drl/file/path文件中定义的规则加载到您在最后一行获得的有状态会话中。

    File path = new File("/drl/file/path");
    KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
    kbuilder.add(ResourceFactory.newFileResource(path), ResourceType.DRL);
    if (kbuilder.hasErrors()) {
        throw new RuntimeException("Errors: " + kbuilder.getErrors());
    }
    kbase = KnowledgeBaseFactory.newKnowledgeBase();
    kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
    StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();

有些方法已被弃用,因此,请不要期望此解决方案在以下版本中有效。

请仔细检查导入,它们全部来自org.kie,而不是来自drools个包。我承认这些导入太多了,但是我从我试图开发的一个例子中粘贴代码,所以我的代码上有更多东西,对不起。

import java.io.File;

import org.kie.api.KieServices;
import org.kie.api.builder.KieBuilder;
import org.kie.api.builder.KieFileSystem;
import org.kie.api.builder.KieScanner;
import org.kie.api.builder.ReleaseId;
import org.kie.api.builder.model.KieBaseModel;
import org.kie.api.builder.model.KieModuleModel;
import org.kie.api.builder.model.KieSessionModel;
import org.kie.api.conf.EqualityBehaviorOption;
import org.kie.api.conf.EventProcessingOption;
import org.kie.api.io.Resource;
import org.kie.api.io.ResourceType;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.conf.ClockTypeOption;
import org.kie.internal.KnowledgeBase;
import org.kie.internal.KnowledgeBaseFactory;
import org.kie.internal.builder.KnowledgeBuilder;
import org.kie.internal.builder.KnowledgeBuilderFactory;
import org.kie.internal.io.ResourceFactory;
import org.kie.internal.runtime.StatefulKnowledgeSession;

希望它有所帮助。

答案 2 :(得分:-1)

相关问题