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

时间:2015-07-14 18:48:56

标签: drools

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

1 个答案:

答案 0 :(得分:0)

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

所有这一切都可以使用API​​完成,因此不需要搞乱议程组。

编辑这是使用无瑕疵API的6.2.0代码。

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();
}