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。如果存在多个模型,还必须知道相关模型的型号命名空间和型号名称。
流程
在客户端应用程序中,将以下依赖项添加到 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 库版本之间的映射是什么?
使用适当的连接信息实例化
KieServicesClient
实例。例如:
KieServicesConfiguration conf = KieServicesFactory.newRestConfiguration(URL, USER, PASSWORD); 1 conf.setMarshallingFormat(MarshallingFormat.JSON); 2 KieServicesClient kieServicesClient = KieServicesFactory.newKieServicesClient(conf);
通过调用 KIE 服务器 Java 客户端上的方法
getServicesClient()
从连接到相关 KIE 服务器 Java 客户端的 KIE 服务器 Java 客户端获取DMNServicesClient
Client:DMNServicesClient dmnClient = kieServicesClient.getServicesClient(DMNServicesClient.class );
dmnClient
现在可在 KIE 服务器上执行决策服务。为所需模型执行决策服务。
例如:
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()); } }
此时,
dmnResult
包含所评估的 DMN 模型中的所有决定结果。您还可以使用
DMNServicesClient
的替代方法,在模型中仅执行特定的 DMN 决策。注意如果 KIE 容器仅包含一个 DMN 模型,您可以省略
$modelNamespace
和$modelName
,因为 KIE Server API 会默认选择它。