我想在运行时加载drl文件。我发现的帖子包括这个版本5.0的one,但我无法弄清楚如何为drools 6.0版做这件事。
答案 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)