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