2016-12-29 3 views
0

Ich bin keine spezifische Art und Weise bekommen, es zu tun geifert mit 6. ich versucht hatte, es mit dem folgenden Beispielcode zu tun: `Wie Drools Decision Tabelle in mehreren Blättern der gleichen Excel-Datei zu importieren, mit 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; 
    } 

`

Problem hier ist geifert 6 verwendet KIEBase Nicht KnowledgeBase, daher bekomme ich keinen geeigneten Weg kompilierte Blätter in KieBase zu laden. Gibt es einen anderen Weg, es in Drools 6 zu tun?

Antwort

0
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(); 

Sie können dies auch mit dsl, dslr und xls-Dateien verwenden.