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

我想在运行时加载一个drl文件。 我发现的post包括这个版本5.0的工作,但我无法弄清楚如何为drools版本6.0。

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

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

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

我使用了从这两个文档中获取的信息:

我已经推出了这个片段,它将/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; 

希望能帮助到你。

您可以在Drools 6中找到您想要的内容: http : //opensourcesoftwareandme.blogspot.com/2015/08/dynamically-create-rules-using-drools.html