我在Eclipse中弄乱了Drools决策表,并注意到,我能够将规则文件导入我的Kie会话的唯一方法是将文件直接放置在Eclipse项目中。我想知道是否有一种方法可以访问位于“ C:Users / user / documents / rules /”中的规则文件,或者该文件是否必须在工作空间中。
我对Drools或KIE并不十分熟悉,所以我对服务的唯一了解涉及网站上的文档以及Google和youtube上的各种教程。到目前为止,我发现的代码似乎还不够。
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("ksession-dtables");
以上内容直接引用了在xml文件中预定义的会话,我不确定如何定义自己的会话来访问Eclipse项目之外的文件。
KieServices kieServices = KieServices.Factory.get();
Resource dt
= ResourceFactory
.newClassPathResource("Sample.xls", getClass());
KieFileSystem kieFileSystem = kieServices.newKieFileSystem().write(dt);
KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
kieBuilder.buildAll();
KieRepository kieRepository = kieServices.getRepository();
ReleaseId krDefaultReleaseId = kieRepository.getDefaultReleaseId();
KieContainer kieContainer = kieServices.newKieContainer(krDefaultReleaseId);
KieSession kieSession = kieContainer.newKieSession();
此块稍好一点,因为我可以直接引用项目中的一个文件,但是问题是它仍然需要在项目中。
答案 0 :(得分:0)
我能找到一个值得解决的问题。
Drools有一个库,试图将任何excel决策表文件转换为DRL文件。使用该库,我使用了excel文件的路径,然后将DRL实质上转换为字符串,然后添加到KIE会话中。最终看起来像这样:
import org.drools.decisiontable.SpreadsheetCompiler;
String rulesExcel = "C:\\my\\path\\file.xls";
InputStream is = null;
try {
is= new FileInputStream(rulesExcel);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
SpreadsheetCompiler sc = new SpreadsheetCompiler();
String rules=sc.compile(is, InputType.XLS);
KieSession kieSession = new KieHelper().addContent(rules, ResourceType.DRL).build().newKieSession();