首页 文章

如何将某个DRL文件绑定到Drools 6.2.0中的某个KieSession

提问于
浏览
0

我正在使用Drools 6.2.0,在我的Maven项目中,我有一些DRL文件,每个文件都有一些不同的规则 . 主要思想是在项目中有一些 Worker ,每个人都有一个KieSession,它将接收将由文件中的规则评估的对象 . 我想将某个DRL文件绑定到某个KieSession . 我已经看到我可以使用'议程组'属性,但我不确定它是如何工作的......

1 回答

  • 0

    您可以将任何DRL文件编译到KnowledgePackage并从中创建知识库,这是KnowledgeSession的起源 . 您甚至可以序列化KnowledgePackage或KnowledgeBase以加快启动速度 .

    所有这些都可以使用API完成,因此不需要搞乱议程组 .

    EDIT 这是使用6.2.0的代码,使用无瑕疵的API .

    private KieSession kieSession;
    
    public void build(String dir, String drl) throws Exception {
        KieServices kieServices = KieServices.Factory.get();
        KieFileSystem kfs = kieServices.newKieFileSystem();
        FileInputStream fis = 
           new FileInputStream( dir + "/" + drl );
    
        kfs.write( "src/main/resources/" + 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 = kieContainer.newKieSession();
    }
    

相关问题