我是drools的新手,我们目前正在项目中使用Drools 5.4.0。 目前,我们正在使用Drools 5.4.0的RuleCompiler.java和PackageBuilder.java类来编译.xls文件并创建ruleSetObject。代码段如下所示
String drlFromFile = null;
if (Pattern.matches(regexPattern, file.getName())) {
if (file.getName().contains("csv") || file.getName().contains("CSV")) {
drlFromFile = RuleCompiler.compileCSV(file);
} else {
drlFromFile = RuleCompiler.compileSpreadSheet(file);
}
if (drlFromFile == null || drlFromFile.isEmpty()) {
logger.debug("Unable to Compile Rule Sheet: " + file.getName());
throw new DroolsParserException("Unable to Compile Rule Sheet: " + file.getName());
}
PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl(new StringReader(drlFromFile));
Package ruleSetObject = builder.getPackage();
// Registering the compiled drl object in ruleExecutionSetRegistry
ruleExecutionSetRegistry.registerRuleSetObject(file.getName(), ruleSetObject,
getRuleEngineProviderName());
}
现在我们需要升级到Drools 6.1.0.final,但我找不到PackageBuilder.java类。我试图寻找它的替代品,但没有得到任何东西。
是否已引入任何新类来代替PackageBuilder.java?有没有人指导我如何使用该课程?
答案 0 :(得分:0)
“新”做事方式是定义KieModule
。实质上,您创建一个包装Drools规则的Maven项目,然后将该项目添加为运行时的依赖项。一般来说,这需要您follow certain conventions来构建项目,以便Drools可以自己找到您的规则。
但是,您可能(像我一样)发现在不完全重组现有项目的情况下迁移更容易。为实现此目的,您仍然可以通过向KieService
添加文件来构建KnowledgeBase
(新KieFileSystem
)。这是一个粗略的例子:
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kfs = kieServices.newKieFileSystem();
kfs.write(ResourceFactory.newFileResource(resource.getPath()));
KieBuilder kieBuilder = kieServices.newKieBuilder(kfs).buildAll();
if (kieBuilder.getResults().hasMessages(Level.ERROR)) {
// It didn't build. Do something about it...
}
KieContainer kieContainer = kieServices
.newKieContainer(kieServices.getRepository().getDefaultReleaseId());
KieSession kieSession = kieContainer.newKieSession();
你已经准备好了。如果它有用,我最近的一个演示项目包含an example of doing this for plain .drl files,根据我的理解,如果你想将电子表格添加到KieFileSystem
而不是DRL,它应该几乎相同。 / p>