web-dev-qa-db-ja.com

Droolsナレッジベースは非推奨

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型も返します。

では、KnowledgeBaseは非推奨になっているので、何を使用する必要がありますか?

14
Jacob Schoen

これは私が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への参照はドキュメントに残っていますが、実際には非推奨です。

19
laune