17.4. 将 DMN 模型 KJAR 迁移到红帽构建 Kogito 微服务
迁移外部应用程序后,您需要将特定于 DMN 模型的 KJAR 迁移到红帽构建 Kogito 微服务。
流程
为您的红帽构建 Kogito 微服务创建一个 Maven 项目。
有关创建 Maven 项目的步骤,请参阅为红帽构建的 Kogito 微服务创建 Maven 项目。
Maven 项目创建 Kogito 工件。
-
将 KJAR 的
src/main/resources文件夹中的 DMN 模型复制到 Kogito 工件的src/main/resources文件夹。 将 KJAR 的
src/test/resources文件夹的测试场景复制到 Kogito 工件的src/test/resources文件夹。重要您需要在项目的
pom.xml文件中导入红帽构建的 Kogito 依赖项测试场景,并使用 KIE Server REST API 创建 JUnit 激活器。如需更多信息,请参阅使用 测试场景测试决策服务。运行以下命令,并确保为指定的非出口测试运行测试场景。
mvn clean install运行 Kogito 应用程序的红帽构建后,您可以检索 Swagger 或 OAS 规格文件。Swagger 或 OAS 规格提供与 REST 端点相同的信息,以及以下实现详情:
- API 可用服务器的基本 URL
- 引用架构名称
当外部应用程序重新路由到新 URL 时,您可以使用提供的实现详情。
在将 DMN 模型 KJAR 迁移到红帽构建 Kogito 微服务后,您需要使用 Red Hat OpenShift Container Platform 部署微服务。有关使用 Openshift 的部署选项,请参阅使用 RHPAM Kogito Operator 的 OpenShift 部署选项。
17.4.1. 将 DMN 模型 KJAR 迁移到红帽构建 Kogito 微服务的示例 复制链接链接已复制到粘贴板!
以下是将 DMN 模型 KJAR 迁移到红帽构建 Kogito 微服务的示例:
图 17.1. 使用 DMN 模型实施的决策服务示例
图 17.2. 使用特定 ItemDefinition 结构的 DMN 模型示例
您需要将对象模型(POJO)定义为在 Business Central 中开发的现有 KJAR 中的 DTO。
在 KJAR 中定义为 DTO 的对象模型示例
package com.myspace.demo20210321;
/**
* This class was automatically generated by the data modeler tool.
*/
public class Reservation implements java.io.Serializable {
static final long serialVersionUID = 1L;
@com.fasterxml.jackson.annotation.JsonFormat(shape = com.fasterxml.jackson.annotation.JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
@com.fasterxml.jackson.databind.annotation.JsonSerialize(using = com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer.class)
private java.time.LocalDate checkin;
@com.fasterxml.jackson.annotation.JsonFormat(shape = com.fasterxml.jackson.annotation.JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
@com.fasterxml.jackson.databind.annotation.JsonSerialize(using = com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer.class)
private java.time.LocalDate checkout;
private java.util.List<java.lang.String> guests;
public Reservation() {
}
public java.time.LocalDate getCheckin() {
return this.checkin;
}
public void setCheckin(java.time.LocalDate checkin) {
this.checkin = checkin;
}
public java.time.LocalDate getCheckout() {
return this.checkout;
}
public void setCheckout(java.time.LocalDate checkout) {
this.checkout = checkout;
}
public java.util.List<java.lang.String> getGuests() {
return this.guests;
}
public void setGuests(java.util.List<java.lang.String> guests) {
this.guests = guests;
}
public Reservation(java.time.LocalDate checkin,
java.time.LocalDate checkout,
java.util.List<java.lang.String> guests) {
this.checkin = checkin;
this.checkout = checkout;
this.guests = guests;
}
}
在上例中,定义的 DTO 与 KIE Server 客户端 Java API 结合使用。或者,您可以在有效负载中指定 DTO,当非 Java 外部应用程序与在 KIE 服务器上部署的 KJAR 交互时。
使用 KIE Server 客户端 Java API 的示例
DMNServicesClient dmnClient = kieServicesClient.getServicesClient(DMNServicesClient.class);
DMNContext dmnContext = dmnClient.newContext();
dmnContext.set("reservation", new com.myspace.demo20210321.Reservation(LocalDate.of(2021, 3, 1),
LocalDate.of(2021, 3, 8),
Arrays.asList("John", "Alice")));
run(dmnClient, dmnContext);
图 17.3. 在有效负载中手动指定 DTO 的示例
在上例中,REST API 中对象模型的 FQCN 用于通用 KIE Server marshalling。