我没有使用Drools 6获得任何具体方法。 我曾尝试使用以下示例代码执行此操作: `
private static KieBase readBase(String strFilePath) throws IOException, BiffException {
DecisionTableConfiguration dtconf = KnowledgeBuilderFactory.newDecisionTableConfiguration();
dtconf.setInputType(DecisionTableInputType.XLS);
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
File xls = new File(strFilePath);
SpreadsheetCompiler compiler = new SpreadsheetCompiler();
Workbook w;
String sheetName = "";
FileInputStream in = null;
try {
w = Workbook.getWorkbook(xls);
for (Sheet sheet : w.getSheets()) {
sheetName = sheet.getName();
in = new FileInputStream(xls);
System.out.println("The sheet name is : " + sheetName);
compileSheet(kbuilder, xls, compiler, sheetName, in);
}
} catch (DecisionTableParseException e) {
System.out.println("Failed to parse spreadsheet " + sheetName + " "
+ e);
}
KieBase k = KnowledgeBaseFactory.newKnowledgeBase();
// kContainer.
KnowledgeBase kb = KnowledgeBaseFactory.newKnowledgeBase();
kb.addKnowledgePackages(kbuilder.getKnowledgePackages());
return kb;
}
private static KnowledgeBuilder compileSheet(KnowledgeBuilder kbuilder, File xls, SpreadsheetCompiler compiler, String sheetName, FileInputStream in) {
try {
String compiled = compiler.compile(in, sheetName);
kbuilder.add(ResourceFactory.newReaderResource(new StringReader(compiled)), ResourceType.DRL);
System.out.println("***************************************drl**************************************");
System.out.println(compiled);
} catch (DecisionTableParseException dtpe) {
if (dtpe.getMessage().equals("No RuleTable's were found in spreadsheet.")) {
System.out.println("No rule tables found in sheet {}" + sheetName);
} else {
throw dtpe;
}
}
return kbuilder;
}
`
这里的问题是Drools 6使用KIEBase而不是KnowledgeBase,所以我没有适当的方法在KieBase中加载编译的表。在Drools 6中还有其他方法吗?
答案 0 :(得分:1)
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kfs = kieServices.newKieFileSystem();
FileInputStream fis = new FileInputStream( "dir/some.drl" );
kfs.write( "src/main/resources/simple.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();
您也可以将它与dsl,dslr和xls文件一起使用。