3.4. 可执行规则模型

Red Hat Process Automation Manager 中的规则资产默认使用标准 kie-maven-plugin 插件从可执行规则模型构建。可执行规则模型是嵌入式模型,为构建时执行的规则提供基于 Java 的表示。可执行模型是之前版本的 Red Hat Process Automation Manager 中打包的标准资产,并允许更快速地创建 KIE 容器和 KIE 基础,特别是在具有大量 DRL (Drools Rule Language)文件和其他 Red Hat Process Automation Manager 资产列表时。

如果不使用 kie-maven-plugin 插件,或者项目中缺少所需的 drools-model-compiler 依赖项,则在没有可执行模型的情况下构建规则资产。因此,要在构建期间生成可执行模型,请确保在 pom.xml 文件中添加 kie-maven-plugin 插件和 drools-model-compiler 依赖项。

可执行规则模型为您的项目提供以下特定优点:

  • 编译时间: 通常,打包的 Red Hat Process Automation Manager 项目(KJAR)包含 DRL 文件和其他 Red Hat Process Automation Manager 工件列表,用于定义规则基础以及一些预生成的类实现约束和结果。当 KJAR 从 Maven 存储库下载并安装到 KIE 容器中时,必须解析并编译这些 DRL 文件。这个过程可能很慢,特别是对于大型规则集。使用可执行模型,您可以在项目 KJAR 中打包,该类实现了项目规则基础的可执行模型,并以更快速的方式重新创建 KIE 容器及其 KIE 基础。在 Maven 项目中,您可以使用 kie-maven-plugin 插件在编译过程中从 DRL 文件中自动生成可执行模型源。
  • 运行时间 : 在可执行模型中,所有约束都定义为 Java lambda 表达式。同样的 lambda 表达式也用于限制评估,因此您不再需要使用 mvel 表达式来解释评估,或即时(JIT)进程将基于 mvel的限制转换为字节码。这会创建更快、效率更高的运行时间。
  • 开发时间: 可执行模型允许您开发和测试决策引擎的新功能,而无需以 DRL 格式直接编码元素或修改 DRL 解析器来支持它们。
注意

对于可执行规则模型中的查询定义,您只能使用最多 10 个参数。

对于可执行规则模型中的规则导致的变量,您只能使用 24 个绑定变量(包括内置 drools 变量)。例如,以下规则结果使用超过 24 个绑定的变量并创建编译错误:

...
then
  $input.setNo25Count(functions.sumOf(new Object[]{$no1Count_1, $no2Count_1, $no3Count_1, ..., $no25Count_1}).intValue());
  $input.getFirings().add("fired");
  update($input);

3.4.1. 在 Red Hat Process Automation Manager 项目中修改或禁用可执行规则模型

Red Hat Process Automation Manager 中的规则资产默认使用标准 kie-maven-plugin 插件从可执行规则模型构建。可执行模型是之前 Red Hat Process Automation Manager 版本中标准资产打包的有效替代方案。但是,如果需要,您可以修改或禁用可执行规则模型,将 Red Hat Process Automation Manager 项目构建为基于 DRL 的 KJAR,而不是默认的基于模型的 KJAR。

流程

以通常的方式构建 Red Hat Process Automation Manager 项目,但根据项目的类型提供一个替代的构建选项:

  • 对于 Maven 项目,在命令终端中导航到 Maven 项目目录,并运行以下命令:

    mvn clean install -DgenerateModel=<VALUE>

    <VALUE > 替换为三个值之一:

    • YES_WITHDRL: (默认)生成与原始项目中 DRL 文件对应的可执行模型,同时还将 DRL 文件添加到生成的 KJAR 中目的( KIE 基础自可执行模型构建)。
    • YES :生成与原始项目中的 DRL 文件对应的可执行模型,并从生成的 KJAR 中排除 DRL 文件。
    • no: 不生成可执行模型。

    禁用默认可执行模型行为的 build 命令示例:

    mvn clean install -DgenerateModel=NO
  • 对于以编程方式配置的 Java 应用程序,默认禁用可执行模型。在 KIE 虚拟文件系统 KieFileSystem 中添加规则资产,并使用 KieBuilder 和以下 buildAll () 方法之一:

    • buildAll () (默认)或 buildAll (DrlProject.class) :不生成可执行模型。
    • buildAll (ExecutableModelProject.class) :生成与原始项目中 DRL 文件对应的可执行模型。

    启用可执行模型行为的代码示例:

    import org.kie.api.KieServices;
    import org.kie.api.builder.KieFileSystem;
    import org.kie.api.builder.KieBuilder;
    
      KieServices ks = KieServices.Factory.get();
      KieFileSystem kfs = ks.newKieFileSystem()
      kfs.write("src/main/resources/KBase1/ruleSet1.drl", stringContainingAValidDRL)
      .write("src/main/resources/dtable.xls",
        kieServices.getResources().newInputStreamResource(dtableFileStream));
    
      KieBuilder kieBuilder = ks.newKieBuilder( kfs );
      // Enable executable model
      kieBuilder.buildAll(ExecutableModelProject.class)
      assertEquals(0, kieBuilder.getResults().getMessages(Message.Level.ERROR).size());