首页 文章

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

提问于
浏览
2

我是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

    'new'做事的方法是定义一个 KieModule . 基本上,您创建一个包装Drools规则的Maven项目,然后将该项目添加为运行时的依赖项 . 通常,您希望在构建项目时如何follow certain conventions,以便Drools可以自己找到您的规则 .

    但是,您可能(像我一样)发现在不完全重构现有项目的情况下迁移更容易 . 要实现这一点,您仍然可以通过向 KieFileSystem 添加文件来构建 KieService (新的 KnowledgeBase ) . 这是一个粗略的例子:

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

    而你're pretty much ready to go. In case it'很有用,我最近的一个演示项目包含了an example of doing this for plain .drl files,根据我的理解,如果你想将电子表格添加到 KieFileSystem 而不是DRL,它应该几乎相同 .

相关问题