3.4. 可执行规则模型


Red Hat Process Automation Manager 中的规则资产默认使用标准 kie-maven-plugin 插件从可执行规则模型构建。可执行规则模型是嵌入式模型,它为构建时执行的规则集提供基于 Java 的表示。在以前的 Red Hat Process Automation Manager 版本中,可执行模型是更有效的标准资产打包的替代方案,并允许 KIE 容器和 KIE 基础更快地创建,特别是在您有大量 DRL (Drools 规则语言)文件和其他 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 中打包实施项目规则基础的可执行模型的 Java 类,并以更快的方式重新创建 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);
Copy to Clipboard Toggle word wrap

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>
    Copy to Clipboard Toggle word wrap

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

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

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

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

    • 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());
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat