Drools 知识库已弃用
Posted
技术标签:
【中文标题】Drools 知识库已弃用【英文标题】:Drools KnowledgeBase Deprecated 【发布时间】:2014-07-10 04:22:13 【问题描述】:我正在将 Drools 规则引擎集成到我的应用程序中。我发现的 99% 的入门示例如下所示:
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newUrlResource( url ),
ResourceType.DRL );
if ( kbuilder.hasErrors() )
System.err.println( builder.getErrors().toString() );
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( builder.getKnowledgePackages() );
StatefulKnowledgeSession ksession = knowledgeBase.newStatefulKnowledgeSession();
ksession.insert( new Fibonacci( 10 ) );
ksession.fireAllRules();
ksession.dispose();
我有类似的工作,但我的问题是KnowledgeBase
被标记为已弃用,这对我来说是一个危险信号,我做错了。现在KnowledgeBaseFactory.newKnowledgeBase()
没有被标记为弃用,但它也返回一个KnowledgeBase
类型。
既然知识库已被弃用,那么我应该使用什么?
【问题讨论】:
您使用的是哪个版本?自 Drools 6 以来,发生了很多变化,所以这可能是罪魁祸首? @DaDaDom 是 6.0.1.Final。我认为是这种情况,但如果 drools doc(pdf 文件)使用知识库,我无法找到替代方案。 【参考方案1】:这是我发现可用于 6.x 的代码:
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kfs = kieServices.newKieFileSystem();
FileInputStream fis = new FileInputStream( pathToSomeDrl );
kfs.write( "src/main/resources/simple.drl",
kieServices.getResources().newInputStreamResource( fis ) );
KieBuilder kieBuilder = kieServices.newKieBuilder( kfs ).buildAll();
Results results = kieBuilder.getResults();
if( results.hasMessages( Message.Level.ERROR ) )
System.out.println( results.getMessages() );
throw new IllegalStateException( "### errors ###" );
KieContainer kieContainer =
kieServices.newKieContainer( kieServices.getRepository().getDefaultReleaseId() );
KieBase kieBase = kieContainer.getKieBase();
KieSession kieSession = kieContainer.newKieSession();
对KnowledgeBase
的引用仍保留在文档中,但它确实已被弃用。
【讨论】:
谢谢,我想这是有道理的。我只是在最新的文档中找不到任何指向我的东西。 应该 `KieSession kieSession = kieContainer.newKieSession();` 是 `KieSession kieSession = kieBase.newKieSession();` ? 两者都可以。如果您不必为 KieBase 指定配置,请使用较短的。 这段代码很有用——我希望它在正确的文档中——但我仍然缺少的是如何在 6 API 中注册自定义评估器,而不使用已弃用的 API。我找到了这个 - 但最终的海报没有说明如何做到这一点......drools.46999.n3.nabble.com/… 是的,这很有用。重要的是要注意,对于 v6.2.0(可能还有 6.x 系列中的其他版本),您必须在 kds.write(...) 调用的路径前添加“src/main/resources/”。未能做到这一点,我的所有测试都未能在稍后执行规则时找到 DRL。以上是关于Drools 知识库已弃用的主要内容,如果未能解决你的问题,请参考以下文章
Drools 规则取决于来自 JDK Map 的知识(不在非 JDK 类中)
已弃用:指令 'allow_url_include' 在第 0 行的 Unknown 中已弃用
Modernizr.load 已弃用。 Yepnope.js 已弃用。怎么办?
UIAlertView 已弃用:首先在 iOS 9.0 中弃用 - UIAlertView 已弃用。将 UIAlertController 与首选样式一起使用