我想在运行时加载一个drl文件。我发现包括这个one的帖子可以在5.0版本上工作,但是我不知道如何在drools 6.0版本上做到这一点。
发布于 2014-05-09 10:37:55
在Drools 6中,您的规则包被部署到Maven。提供了一个KieScanner,您可以将其附加到您的KieContainer。这将以定义的间隔轮询您的存储库,以查看包是否已更新,如果是,则下载最新的包。
Drools文档中提供了有关如何定义KieScanner (包括代码示例)的完整说明:
https://docs.jboss.org/drools/release/latest/drools-docs/html/ch04.html
发布于 2015-06-04 13:13:06
我使用了这两个文档中的信息:
我已经提出了这段代码,它将/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;
希望能有所帮助。
发布于 2015-08-10 18:45:19
https://stackoverflow.com/questions/23542610
复制相似问题