【发布时间】:2014-06-25 21:28:39
【问题描述】:
我想在运行时加载一个 drl 文件。我发现包括 one 在内的帖子适用于 5.0 版,但我不知道如何为 drools 6.0 版做到这一点。
【问题讨论】:
我想在运行时加载一个 drl 文件。我发现包括 one 在内的帖子适用于 5.0 版,但我不知道如何为 drools 6.0 版做到这一点。
【问题讨论】:
在 Drools 6 中,您的规则包被部署到 Maven。提供了一个 KieScanner,您可以将其附加到您的 KieContainer。这会按定义的时间间隔轮询您的存储库,以查看软件包是否已更新,如果是,则下载最新的。
Drools 文档中提供了有关如何定义 KieScanner(包括代码示例)的完整说明:
https://docs.jboss.org/drools/release/latest/drools-docs/html/ch04.html
【讨论】:
我使用了从这两个文档中获取的信息:
我提出了这个 sn-p,它将/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 包。我承认这些导入太多了,但我正在粘贴我正在尝试开发的示例中的代码,所以我的代码中有更多内容,对此感到抱歉。
导入 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;
希望对你有帮助。
【讨论】:
您可以在 Drools 6 中找到所需内容的操作指南:http://oncodesign.io/2015/08/10/dynamically-create-rules-using-drools--rule-templates/
【讨论】: