Java Drools 知识库已弃用

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/23784652/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-14 01:12:01  来源:igfitidea点击:

Drools KnowledgeBase Deprecated

javadrools

提问by Jacob Schoen

I am integrating the Drools Rules engine into my application. 99% of the examples I have found to get started look like:

我正在将 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();

I have something similar working, but my question is that KnowledgeBaseis marked as deprecated, which is a red flag to me that I am doing it wrong. Now KnowledgeBaseFactory.newKnowledgeBase()is not marked deprecated, but it also returns a KnowledgeBasetype.

我有类似的工作,但我的问题是KnowledgeBase被标记为已弃用,这对我来说是一个危险信号,我做错了。现在KnowledgeBaseFactory.newKnowledgeBase()没有被标记为弃用,但它也返回一个KnowledgeBase类型。

So what should I be using since KnowledgeBase is deprecated?

那么,由于不推荐使用知识库,我应该使用什么?

采纳答案by laune

This is the code I've found to work with 6.x:

这是我发现适用于 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();

References to KnowledgeBasehave remained in the documentation, but it is indeed deprecated.

参考文献KnowledgeBase保留在文档中,但它确实已被弃用。