简单的 Drools 6 和 Spring 示例
Simple Drools 6 and Spring Example
我想在我的项目中使用 drools,但尽可能保持通用。我想做的是给定一个 drools 文件(它的路径)和一组对象,我想针对给定对象列表执行给定文件中的所有规则。到目前为止,我看到的所有示例都在某些配置中硬编码了口水文件,有没有办法让它更通用?
这适用于各种资源,而不仅仅是 DRL。
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kfs = kieServices.newKieFileSystem();
FileInputStream fis = new FileInputStream( "simple/simple.drl" );
kfs.write( "src/main/resources/simple.drl",
kieServices.getResources().newInputStreamResource( fis ) );
KieBuilder kieBuilder = kieServices.newKieBuilder( kfs ).buildAll();
// check there have been no errors for rule setup
Results results = kieBuilder.getResults();
if( results.hasMessages( Message.Level.ERROR ) ){
System.out.println( results.getMessages() );
throw new IllegalStateException( "### errors ###" );
}
KieContainer kieContainer =
kieServices.newKieContainer( kieBuilder.getKieModule().getReleaseId() );
KieSession kieSession = kieContainer.newKieSession();
我想在我的项目中使用 drools,但尽可能保持通用。我想做的是给定一个 drools 文件(它的路径)和一组对象,我想针对给定对象列表执行给定文件中的所有规则。到目前为止,我看到的所有示例都在某些配置中硬编码了口水文件,有没有办法让它更通用?
这适用于各种资源,而不仅仅是 DRL。
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kfs = kieServices.newKieFileSystem();
FileInputStream fis = new FileInputStream( "simple/simple.drl" );
kfs.write( "src/main/resources/simple.drl",
kieServices.getResources().newInputStreamResource( fis ) );
KieBuilder kieBuilder = kieServices.newKieBuilder( kfs ).buildAll();
// check there have been no errors for rule setup
Results results = kieBuilder.getResults();
if( results.hasMessages( Message.Level.ERROR ) ){
System.out.println( results.getMessages() );
throw new IllegalStateException( "### errors ###" );
}
KieContainer kieContainer =
kieServices.newKieContainer( kieBuilder.getKieModule().getReleaseId() );
KieSession kieSession = kieContainer.newKieSession();