決策表咱們在drools規則引擎初探裏作了簡單介紹,這裏主要是介紹如何經過java代碼來把這個excel文件和drools關聯起來,如何使其達到咱們想要的效果。html
這裏假設咱們在resources目錄下有這麼一個文件:/drools/decisiontable/mydecisiontable.xlsjava
而後在http://docs.jboss.org/drools/release/6.4.0.Final/drools-docs/html_single/index.html#d0e5549中對決策表的使用也提了一下,必定要有個對應的api
kmodule.xml ,在這裏咱們並無提供這個文件,由於在kie-api的介紹和使用中咱們已經知道了能夠經過程序來得到。app
具體代碼以下:ui
//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的一些組件,具體介紹可參見excel