7.2. 使用 KIE 服务器 Java 客户端 API 执行 DMN 服务


KIE 服务器 Java 客户端 API 提供了通过 REST 或 KIE 服务器的 JMS 接口调用远程 DMN 服务的轻量级方法。这个方法减少了与 KIE 基本交互所需的运行时依赖项数量。从决策定义中分离调用代码,通过使它们能够按照适当的步调进行迭代,从而提高了灵活性。

有关 KIE Server Java 客户端 API 的更多信息,请参阅使用 KIE API 与 Red Hat Process Automation Manager 交互

先决条件

  • KIE 服务器是安装和配置的,包括具有 kie-server 角色的用户的已知用户名和凭证。有关安装选项,请参阅 规划 Red Hat Process Automation Manager 安装
  • 您已将 DMN 项目构建为 KJAR 工件,并将其部署到 KIE 服务器中:

    mvn clean install

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

  • 您有包含 DMN 模型的 KIE 容器的 ID。如果存在多个模型,还必须知道相关模型的型号命名空间和型号名称。

流程

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

    <!-- Required for the KIE Server Java client API -->
    <dependency>
      <groupId>org.kie.server</groupId>
      <artifactId>kie-server-client</artifactId>
      <version>${rhpam.version}</version>
    </dependency>

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

    注意

    考虑将 Red Hat Business Automation 材料清单(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.13.5.redhat-00002</version>
      <scope>import</scope>
      <type>pom</type>
    </dependency>

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

  2. 使用适当的连接信息实例化 KieServicesClient 实例。

    例如:

    KieServicesConfiguration conf =
        KieServicesFactory.newRestConfiguration(URL, USER, PASSWORD); 1
    
    conf.setMarshallingFormat(MarshallingFormat.JSON);  2
    
    KieServicesClient kieServicesClient = KieServicesFactory.newKieServicesClient(conf);
    1
    连接信息:
    • URL 示例 :http://localhost:8080/kie-server/services/rest/server
    • 该凭据应当引用具有 kie-server 角色的用户。
    2
    Marshalling 格式是一个 org.kie.server.api.marshalling.MarshallingFormat 的实例。它控制消息是 JSON 还是 XML。Marshalling 格式的选项为 JSON、JAXB 或 XSTREAM。
  3. 通过调用 KIE 服务器 Java 客户端上的方法 getServicesClient() 从连接到相关 KIE 服务器 Java 客户端的 KIE 服务器 Java 客户端获取 DMNServicesClient Client:

    DMNServicesClient dmnClient = kieServicesClient.getServicesClient(DMNServicesClient.class );

    dmnClient 现在可在 KIE 服务器上执行决策服务。

  4. 为所需模型执行决策服务。

    例如:

    for (Integer age : Arrays.asList(1,12,13,64,65,66)) {
        DMNContext dmnContext = dmnClient.newContext(); 1
        dmnContext.set("Age", age);  2
        ServiceResponse<DMNResult> serverResp =   3
            dmnClient.evaluateAll($kieContainerId,
                                  $modelNamespace,
                                  $modelName,
                                  dmnContext);
    
        DMNResult dmnResult = serverResp.getResult();  4
        for (DMNDecisionResult dr : dmnResult.getDecisionResults()) {
            log.info("Age: " + age + ", " +
                     "Decision: '" + dr.getDecisionName() + "', " +
                     "Result: " + dr.getResult());
        }
    }
    1
    实例化新的 DMN 上下文,作为模型评估的输入。请注意,本例多次通过 Age 类决策进行循环。
    2
    为输入 DMN 上下文分配输入变量。
    3
    评估 DMN 模型中定义的所有 DMN 决策:
    • $kieContainerId 是部署了包含 DMN 模型的 KJAR 的容器的 ID
    • $modelNamespace 是型号的命名空间。
    • $modelName 是模型的名称。
    4
    DMN Result 对象可从服务器响应中获得。

    此时,dmnResult 包含所评估的 DMN 模型中的所有决定结果。

    您还可以使用 DMNServicesClient 的替代方法,在模型中仅执行特定的 DMN 决策。

    注意

    如果 KIE 容器仅包含一个 DMN 模型,您可以省略 $modelNamespace$modelName,因为 KIE Server API 会默认选择它。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.