PackageBuilder.java在Drools 6.1.0.final中不可用

时间:2014-11-20 10:06:01

标签: drools

我是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?有没有人指导我如何使用该课程?

1 个答案:

答案 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>