第 5 章 DMN 模型执行


您可以使用 Business Central 在 Red Hat Process Automation Manager 项目中创建或导入 DMN 文件,或者将 DMN 文件打包为您的项目知识 JAR (KJAR)文件的一部分,而无需 Business Central。在 Red Hat Process Automation Manager 项目中实现了 DMN 文件后,您可以通过将其部署到 KIE Server for Remote Access 或直接操作 KIE 容器来执行 DMN 决策服务。还提供了创建和部署 DMN 知识软件包的其他选项,大多数都类似所有知识资产,如 DRL 文件或进程定义。

有关使用项目打包和部署方法包含外部 DMN 资产的详情,请参考 打包和部署 Red Hat Process Automation Manager 项目

5.1. 直接嵌入 Java 应用程序中的 DMN 调用

当知识资产直接嵌入到调用程序中或物理拉取时,KIE 容器是本地的,或使用 KJAR 的 Maven 依赖项进行物理拉取。通常,如果代码版本和 DMN 定义版本之间有紧密关系,则通常直接将知识资产嵌入到项目中。在有意更新并重新部署应用程序后,对决定所做的任何更改都会生效。这种方法的一个优点是,正确的操作不依赖于任何外部依赖项到运行时,这可能是锁定环境的限制。

使用 Maven 依赖项可以进一步的灵活性,因为决策的特定版本可以动态更改(例如,使用系统属性),它可以定期扫描更新和自动更新。这引入了对服务的部署时间的外部依赖项,但在本地执行决策,从而减少在运行时对外部服务的依赖。

先决条件

  • 您已将 DMN 项目构建为 KJAR 工件,并将其部署到 Maven 存储库中,或者已包含您的 DMN 资产作为项目 classpath 的一部分。理想情况下,您已将 DMN 项目构建为可执行模型,以便更有效地执行:

    mvn clean install -DgenerateDMNModel=yes
    Copy to Clipboard Toggle word wrap

    有关项目打包和部署以及可执行模型的更多信息,请参阅打包和部署 Red Hat Process Automation Manager 项目

�程

  1. 在客户端应用程序中,将以下依赖项添加到 Java 项目的相关类路径中:

    <!-- Required for the DMN runtime API -->
    <dependency>
      <groupId>org.kie</groupId>
      <artifactId>kie-dmn-core</artifactId>
      <version>${rhpam.version}</version>
    </dependency>
    
    <!-- Required if not using classpath KIE container -->
    <dependency>
      <groupId>org.kie</groupId>
      <artifactId>kie-ci</artifactId>
      <version>${rhpam.version}</version>
    </dependency>
    Copy to Clipboard Toggle word wrap

    & lt;version > 是项目中当前使用的 Red Hat Process Automation Manager 的 Maven 工件版本(如 7.44.0.Final-redhat-00006)。

    注意

    考虑将 Red Hat Business Automation Manager (BOM)依赖项添加到项目 pom.xml 文件,而不是为单个依赖项指定 Red Hat Process Automation Manager < version >。Red Hat Business Automation BOM 适用于 Red Hat Decision Manager 和 Red Hat Process Automation Manager。当您添加 BOM 文件时,项目中包含了来自提供的 Maven 存储库传输性依赖关系的正确版本。

    BOM 依赖项示例:

    <dependency>
      <groupId>com.redhat.ba</groupId>
      <artifactId>ba-platform-bom</artifactId>
      <version>7.9.1.redhat-00003</version>
      <scope>import</scope>
      <type>pom</type>
    </dependency>
    Copy to Clipboard Toggle word wrap

    有关 Red Hat Business Automation BOM 的更多信息,请参阅 RHPAM 产品和 maven 库版本之间的映射是什么?

  2. classpathReleaseId 创建 KIE 容器:

    KieServices kieServices = KieServices.Factory.get();
    
    ReleaseId releaseId = kieServices.newReleaseId( "org.acme", "my-kjar", "1.0.0" );
    KieContainer kieContainer = kieServices.newKieContainer( releaseId );
    Copy to Clipboard Toggle word wrap

    其它选项:

    KieServices kieServices = KieServices.Factory.get();
    
    KieContainer kieContainer = kieServices.getKieClasspathContainer();
    Copy to Clipboard Toggle word wrap
  3. 使用 model 命名空间和 modelName 从 KIE 容器获取 DMNRuntime,以及对要评估的 DMN 模型的引用:

    DMNRuntime dmnRuntime = KieRuntimeFactory.of(kieContainer.getKieBase()).get(DMNRuntime.class);
    
    String namespace = "http://www.redhat.com/_c7328033-c355-43cd-b616-0aceef80e52a";
    String modelName = "dmn-movieticket-ageclassification";
    
    DMNModel dmnModel = dmnRuntime.getModel(namespace, modelName);
    Copy to Clipboard Toggle word wrap
  4. 为所需模型执行决策服务:

    DMNContext dmnContext = dmnRuntime.newContext();  
    1
    
    
    for (Integer age : Arrays.asList(1,12,13,64,65,66)) {
        dmnContext.set("Age", age);  
    2
    
        DMNResult dmnResult =
            dmnRuntime.evaluateAll(dmnModel, dmnContext);  
    3
    
    
        for (DMNDecisionResult dr : dmnResult.getDecisionResults()) {  
    4
    
            log.info("Age: " + age + ", " +
                     "Decision: '" + dr.getDecisionName() + "', " +
                     "Result: " + dr.getResult());
      }
    }
    Copy to Clipboard Toggle word wrap
    1
    实例化一个新的 DMN 上下文,作为模型评估的输入。请注意,本例多次通过 Age Classification 决策进行循环。
    2
    为输入 DMN 上下文分配输入变量。
    3
    评估 DMN 模型中定义的所有 DMN 决策。
    4
    每个评估都可能导致一个或多个结果,创建循环。

    这个示例打印以下输出:

    Age 1 Decision 'AgeClassification' : Child
    Age 12 Decision 'AgeClassification' : Child
    Age 13 Decision 'AgeClassification' : Adult
    Age 64 Decision 'AgeClassification' : Adult
    Age 65 Decision 'AgeClassification' : Senior
    Age 66 Decision 'AgeClassification' : Senior
    Copy to Clipboard Toggle word wrap

    如果 DMN 模型之前没有编译为高效执行的可执行模型,您可以在执行 DMN 模型时启用以下属性:

    -Dorg.kie.dmn.compiler.execmodel=true
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat