决策表我们在drools规则引擎初探里做了简单介绍,这里主要是介绍如何通过java代码来把这个excel文件和drools关联起来,如何使其达到我们想要的效果。
这里假设我们在resources目录下有这么一个文件:/drools/decisiontable/mydecisiontable.xls
然后在http://docs.jboss.org/drools/release/6.4.0.Final/drools-docs/html_single/index.html#d0e5549中对决策表的使用也提了一下,一定要有个对应的
kmodule.xml ,在这里我们并没有提供这个文件,因为在kie-api的介绍和使用中我们已经知道了可以通过程序来获得。
具体代码如下:
//1.获取一个KieServices KieServices kieServices = KieServices.Factory.get(); //2.创建kiemodule xml对应的class KieModuleModel kieModuleModel = kieServices.newKieModuleModel(); //3.创建KieFileSystem虚拟文件系统 KieFileSystem kieFileSystem = kieServices.newKieFileSystem(); //4.添加具体的KieBase标签 KieBaseModel kieBaseModel = kieModuleModel.newKieBaseModel("mydecision"). addPackage("mydecision");//kie fileSystem 中资源文件的文件夹 //<KieBase></KieBase>标签添加KieSession属性 kieBaseModel.newKieSessionModel("kiession-mydecision");//a
//5.添加kiemodule.xml文件到虚拟文件系统 String kieModuleModelXml = kieModuleModel.toXML(); kieFileSystem.writeKModuleXML(kieModuleModelXml);//kieModuleModel
//6.把规则文件加载到虚拟文件系统 Resource resource = getResource("drools/decisiontable/mydecisiontable.xls"); String fileName = "mydecision-table" + resource.getResourceType().getDefaultExtension(); //这里是把规则文件添加到虚拟系统,第一个参数是文件在虚拟系统中的路径,这里的文件目录和4.处的addPackage必须一致,否则失败 String kieFilePath = new StringBuilder("src/main/resources/"). append("mydecision").append("/").append(fileName).toString(); kieFileSystem.write(kieFilePath, resource); //7.构建所有的KieBase并把所有的KieBase添加到仓库里 kieServices.newKieBuilder(kieFileSystem).buildAll(); KieContainer kieContainer = kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId());//创建kie容器 //8.从容器中获取一个会话,这里和a处添加的是一个key,否则找不到 找不到任何一个会报异常 KieSession kieSession = kieContainer.newKieSession("kiession-mydecision"); kieSession.insert(new Student(11, "max")); kieSession.insert(new Student(13, "max")); kieSession.fireAllRules();
看注释应该能基本看明白了。这里用到了kie-api的一些组件