我正在使用Drools 6.2.0,在我的Maven项目中,我有一些DRL文件,每个文件都有一些不同的规则 . 主要思想是在项目中有一些 Worker ,每个人都有一个KieSession,它将接收将由文件中的规则评估的对象 . 我想将某个DRL文件绑定到某个KieSession . 我已经看到我可以使用'议程组'属性,但我不确定它是如何工作的......
您可以将任何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(); }
1 回答
您可以将任何DRL文件编译到KnowledgePackage并从中创建知识库,这是KnowledgeSession的起源 . 您甚至可以序列化KnowledgePackage或KnowledgeBase以加快启动速度 .
所有这些都可以使用API完成,因此不需要搞乱议程组 .
EDIT 这是使用6.2.0的代码,使用无瑕疵的API .