2015-09-15 24 views
0

我有一箇舊的和直流代碼的drools,這段代碼可以讀取容器外部的規則文件(drl),並且可以使用任何Value對象和任何類。Drools到版本6.2的棄用代碼

  CommandExecutor ksession; 
      KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); 
      String file = System.getenv("DOMAIN_HOME")+"/mydrls/business.drl"; 
      kbuilder.add(ResourceFactory.newFileResource(file), ResourceType.DRL); 
      KnowledgeBase kbase = kbuilder.newKnowledgeBase(); 
      ksession = kbase.newStatelessKnowledgeSession(); 
      DataTest data = new DataTest(); 
      data.setAge(25); 
      List cmds = new ArrayList(); 
      cmds.add(CommandFactory.newInsert(data)); 
      ksession.execute(CommandFactory.newBatchExecution(cmds)); 

我怎麼能做同樣的事情,但與Drools版本6.2?

回答

0

您可以通過使用KieHelper類簡化勞瑞懶懶的代碼:

KieHelper kieHelper = new KieHelper();   
kieHelper.addResource(ResourceFactory.newInputStreamResource(new FileInputStream("simple/simple.drl")), ResourceType.DRL); 

Results results = kieHelper.verify(); 
if(results.hasMessages(Message.Level.ERROR)){ 
    System.out.println(results.getMessages()); 
    throw new IllegalStateException("### errors ###"); 
} 

StatelessKieSession kieSession = kieHelper.build().newStatelessKieSession(); 

希望它能幫助。

0

試試這個:

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(); 
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(); 
StatelessKieSession kieSession = 
    kieContainer.newStatelessKieSession(); 
}