Java 1.8.0_162,Drools 6.5.0和多个决策表(电子表格)

时间:2018-06-14 16:44:44

标签: java drools kie

我正在使用带有Java 1.8.0_162的Drools 6.5.0,并且所有内容都适用于单个决策表(电子表格),请参阅下面的代码:

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

...

如何动态地,顺序地加载和执行多个决策表的规则?

换句话说,加载决策表#1并根据事实(数据)执行其规则,当完成加载决策表#2并执行其对事实(数据)的规则时,完成加载决策表#3并执行它的规则反对事实(数据)等,直到完成所有决策表的处理。动态,将所有决策表放在drools进程可以获取和处理的类路径中的相同位置(文件夹)中。

欢迎任何建议。

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用规则流程图进行操作。添加jBPM插件并编写规则流程图。添加ks.startprocess(“ processId”);在fireAllRules()之前。

注意:processId是规则流程图的进程ID。

答案 1 :(得分:0)

我也遇到过类似的情况,但是我没有使用决策表,而是使用了规则的drl文件。 因此,首先,如果您希望将所有规则都运行一次,那么请使用无状态的kie-session而不是有状态的。

        StatelessKieSession session = null;
        KieServices ks = KieServices.Factory.get();
        KieContainer kContainer = ks.getKieClasspathContainer();
        session = kContainer.newStatelessKieSession("sessionIdentifier");

一旦运行此会话中的规则,事实对象就会更新,您可以使用不同的sessionidentifier处理下一组规则。

无状态会话比有状态会话具有更大的性能优势。更多喜欢使用和抛出。

运行所有规则文件(决策表)可以通过遍历kmodule.xml中注册的所有会话标识符来完成

现在,在这种情况下,规则文件保存在资源文件夹中。

但是,如果要从文件系统加载它们,那也是可以实现的。