首页 > 解决方案 > Java 8、Drools 5.x 和 Drools 7.x

问题描述

我正在使用 Drools 5.x(drools-compiler 5.2.1.Final、drools-decisiontables 5.4.0.Final 和 drools-templates 5.4.0.Final;jbpm-flow 5.1.1.Final、jbpm-bmpn2 5.1。 1.Final 及其各自的依赖项)对于我的 Java 工作,我使用 Java 1.7.0_21 构建/运行它。我目前的设置工作正常。我正在使用决策表(电子表格)。

如上所述,我可以使用 drools 5.x 使用 Java 1.8.0_162 构建/运行我的项目;但是,当 java 作业运行时,它会加载决策表(电子表格),但不会触发任何规则,我在执行的最后一行中没有遇到异常:

Properties props = new Properties();

KnowledgeBuilderConfiguration configuration = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration(props);

KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newDecisionTableConfiguration(configuration);

DecisionTableConfiguration config = KnowledgeBuilderFactory.newDecisionTableConfiguration();

config.setInputType(DecisionTableInputType.XLS);

kbuilder.add(ResourceFactory.newClassPathResource(spreadsheetFile), ResourcType.DTABLE, config);  // last line executed and then job exists and completes successfully.

在执行最后一行之前,我放置了一些调试日志,它们显示以下内容:

属性(道具):{}

KnowledgeBuilderConfiguration(配置):org.drools.compiler.PackageBuilderConfiguration@630cb4a4

知识构建器(kbuilder):org.drools.builder.impl.KnowledgeBuilderImpl@239bof9d

ResourceFactory.newClassPathResource(spreadsheetFile): [ClassPathResource path='spreadsheet.xls']

ResourceType.DTABLE: ResourceType = '决策表'

决策表配置(配置):org.drools.builder.conf.impl.DecisionTableConfigurationImpl@150ab4ed

DecisionTableConfiguration (config.getInputType()):XLS

所以我决定从 drools 5.5.0 升级到 7.5.0 并使用 kie-api/kie-ci;我不得不进行一些重构,因为现在 drools 是 KIE(知识就是一切)保护伞的一部分,请参见下面的代码:

KieServices ks = KieServices.Factory.get();
KieContainer kc = ks.getKieClasspathContainer();
KieSession ks = kc.newKieSession("ksession-dtables");  //stateful session
FactHandle fh = ks.insert(fact);
ks.fireAllRules();

……

包和规则已加载到知识库中,但只有第一个规则启动然后停止,我是否需要升级我的决策表(电子表格)才能使用 Java 8 的 drools 7.5.0?

欢迎任何建议。

谢谢!!

标签: javadroolskie

解决方案


我开始使用 drools 6.5.0,现在一切正常。


推荐阅读