第 26 章 为 KIE 服务器模板和实例处理自动化管理器控制器 Java 客户端 API
Red Hat Process Automation Manager 提供了一个流程 Automation Manager 控制器 Java 客户端 API,可让您使用 Java 客户端应用程序中的 REST 或 WebSocket 协议连接到流程自动化管理器控制器。您可以使用 Process Automation Manager 控制器 Java 客户端 API 作为 Process Automation Manager 控制器 REST API 的替代选择,来与 KIE Server 模板(配置)、KIE Server 实例(远程服务器)以及 Red Hat Process Automation Manager 中的关联 KIE 容器(部署单元)进行交互,而无需使用 Business Central 用户界面。通过此 API 支持,您可以更有效地维护红帽流程自动化管理器服务器和资源,并优化与红帽流程自动化管理器的集成和开发。
使用 Process Automation Manager 控制器 Java 客户端 API,您还可以执行流程 Automation Manager 控制器 REST API 支持的以下操作:
- 检索有关 KIE 服务器模板、实例和关联的 KIE 容器的信息
- 更新、启动或停止与 KIE 服务器模板和实例关联的 KIE 容器
- 创建、更新或删除 KIE 服务器模板
- 创建、更新或删除 KIE 服务器实例
处理 Automation Manager 控制器 Java 客户端 API 请求需要以下组件:
- 身份验证
Process Automation Manager 控制器 Java 客户端 API 需要以下用户角色的 HTTP 基本身份验证,具体取决于控制器类型:
-
如果您安装了 Business Central 且想要使用内置 Automation Manager 控制器,REST
-all用户角色 -
如果您安装无头进程 Automation Manager 控制器与 Business Central 分开,则
kie-server用户角色
要查看为您的 Red Hat Process Automation Manager 分发配置的用户角色,请导航到
~/$SERVER_HOME/standalone/configuration/application-roles.properties和~/application-users.properties。要添加具有
kie-server角色或rest-all角色的用户(假设已经设置了 Keystore),请导航到~/$SERVER_HOME/bin,并使用指定的角色或角色运行以下命令:$ ./bin/jboss-cli.sh --commands="embed-server --std-out=echo,/subsystem=elytron/filesystem-realm=ApplicationRealm:add-identity(identity=<USERNAME>),/subsystem=elytron/filesystem-realm=ApplicationRealm:set-password(identity=<USERNAME>, clear={password='<PASSWORD>'}),/subsystem=elytron/filesystem-realm=ApplicationRealm:add-identity-attribute(identity=<USERNAME>, name=role, value=['rest-all','kie-server'])"如果没有设置 Keystore,则执行以下命令来创建密钥存储:
$ keytool -importpassword -keystore $SERVER_HOME/standalone/configuration/kie_keystore.jceks -keypass <SECRETKEYPASSWORD> -alias kieserver -storepass <SECRETSTOREPASSWORD> -storetype JCEKS另外,将以下属性添加到
~/$SERVER_HOME/standalone/configuration/standalone-full.xml:<property name="kie.keystore.keyStoreURL" value="file:///data/jboss/rhpam780/standalone/configuration/kie_keystore.jceks"/> <property name="kie.keystore.keyStorePwd" value="<SECRETSTOREPASSWORD>"/> <property name="kie.keystore.key.server.alias" value="kieserver"/> <property name="kie.keystore.key.server.pwd" value="<SECRETKEYPASSWORD>"/> <property name="kie.keystore.key.ctrl.alias" value="kieserver"/> <property name="kie.keystore.key.ctrl.pwd" value="<SECRETKEYPASSWORD>"/>要使用 Process Automation Manager 控制器访问配置
kie-server或rest-all用户,请导航到~/$SERVER_HOME/standalone/configuration/standalone-full.xml,取消注释org.kie.server属性(如果适用),并添加控制器用户登录凭证和控制器位置(如果需要):<property name="org.kie.server.location" value="http://localhost:8080/kie-server/services/rest/server"/> <property name="org.kie.server.controller" value="http://localhost:8080/business-central/rest/controller"/> <property name="org.kie.server.controller.user" value="<USERNAME>"/> <property name="org.kie.server.id" value="default-kieserver"/>有关用户角色和 Red Hat Process Automation Manager 安装选项的更多信息,请参阅 规划 Red Hat Process Automation Manager 安装。
-
如果您安装了 Business Central 且想要使用内置 Automation Manager 控制器,REST
- 项目依赖项
Process Automation Manager 控制器 Java 客户端 API 需要在 Java 项目的相关类路径上以下依赖项:
<!-- For remote execution on controller --> <dependency> <groupId>org.kie.server</groupId> <artifactId>kie-server-controller-client</artifactId> <version>${rhpam.version}</version> </dependency> <!-- For REST client --> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-client</artifactId> <version>${resteasy.version}</version> </dependency> <!-- For WebSocket client --> <dependency> <groupId>io.undertow</groupId> <artifactId>undertow-websockets-jsr</artifactId> <version>${undertow.version}</version> </dependency> <!-- For debug logging (optional) --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>${logback.version}</version> </dependency>Red Hat Process Automation Manager 依赖项的
<version>是项目中当前使用的 Red Hat Process Automation Manager 的 Maven 工件版本(如 7.59.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.12.0.redhat-00008</version> <scope>import</scope> <type>pom</type> </dependency>有关 Red Hat Business Automation BOM 的更多信息,请参阅 RHPAM 产品和 maven 库版本之间的映射是什么?
- 客户端请求配置
与 Process Automation Manager 控制器 Java 客户端 API 的所有 Java 客户端请求必须至少定义以下控制器通信组件:
-
如果您安装了无头流程 Automation Manager 控制器,则
rest-all用户的凭证(如果安装了 Business Central)或kie-server用户 REST 或 WebSocket 协议的进程自动化管理器控制器位置:
-
REST URL 示例:
http://localhost:8080/business-central/rest/controller -
WebSocket URL 示例:
ws://localhost:8080/headless-controller/websocket/controller
-
REST URL 示例:
- API 请求和响应的 Marshalling 格式(JSON 或 JAXB)
-
KieServerControllerClient对象,充当使用 Java 客户端 API 启动服务器通信的入口点 -
KieServerControllerClientFactory定义 REST 或 WebSocket 协议和用户访问权限 -
所用的进程 Automation Manager 控制器客户端服务或服务,如
listServerTemplates、getServerTemplate或getServerInstances
以下是带有以下组件的 REST 和 WebSocket 客户端配置示例:
使用 REST 的客户端配置示例
import org.kie.server.api.marshalling.MarshallingFormat; import org.kie.server.controller.api.model.spec.ServerTemplateList; import org.kie.server.controller.client.KieServerControllerClient; import org.kie.server.controller.client.KieServerControllerClientFactory; public class ListServerTemplatesExample { private static final String URL = "http://localhost:8080/business-central/rest/controller"; private static final String USER = "baAdmin"; private static final String PASSWORD = "password@1"; private static final MarshallingFormat FORMAT = MarshallingFormat.JSON; public static void main(String[] args) { KieServerControllerClient client = KieServerControllerClientFactory.newRestClient(URL, USER, PASSWORD); final ServerTemplateList serverTemplateList = client.listServerTemplates(); System.out.println(String.format("Found %s server template(s) at controller url: %s", serverTemplateList.getServerTemplates().length, URL)); } }使用 WebSocket 的客户端配置示例
import org.kie.server.api.marshalling.MarshallingFormat; import org.kie.server.controller.api.model.spec.ServerTemplateList; import org.kie.server.controller.client.KieServerControllerClient; import org.kie.server.controller.client.KieServerControllerClientFactory; public class ListServerTemplatesExample { private static final String URL = "ws://localhost:8080/my-controller/websocket/controller"; private static final String USER = "baAdmin"; private static final String PASSWORD = "password@1"; private static final MarshallingFormat FORMAT = MarshallingFormat.JSON; public static void main(String[] args) { KieServerControllerClient client = KieServerControllerClientFactory.newWebSocketClient(URL, USER, PASSWORD); final ServerTemplateList serverTemplateList = client.listServerTemplates(); System.out.println(String.format("Found %s server template(s) at controller url: %s", serverTemplateList.getServerTemplates().length, URL)); } }-
如果您安装了无头流程 Automation Manager 控制器,则
Process Automation Manager 控制器 Java 客户端 API 可让您使用 Java 客户端应用程序的 REST 或 WebSocket 协议连接到 Process Automation Manager 控制器。您可以使用 Process Automation Manager 控制器 Java 客户端 API 作为 Process Automation Manager 控制器 REST API 的替代选择,来与 KIE Server 模板(配置)、KIE Server 实例(远程服务器)以及 Red Hat Process Automation Manager 中的关联 KIE 容器(部署单元)进行交互,而无需使用 Business Central 用户界面。
先决条件
- KIE 服务器已安装并运行。
- Process Automation Manager 控制器或无头进程 Automation Manager 控制器已安装并在运行。
-
如果您安装了 Business Central,或者 Kie
-server用户角色访问无头流程自动化管理器控制器,则您拥有对流程自动化管理器控制器的rest-all用户角色访问权限。 - 您有一个带有 Red Hat Process Automation Manager 资源的 Java 项目。
流程
在客户端应用程序中,确保以下依赖项已添加到 Java 项目的相关类路径中:
<!-- For remote execution on controller --> <dependency> <groupId>org.kie.server</groupId> <artifactId>kie-server-controller-client</artifactId> <version>${rhpam.version}</version> </dependency> <!-- For REST client --> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-client</artifactId> <version>${resteasy.version}</version> </dependency> <!-- For WebSocket client --> <dependency> <groupId>io.undertow</groupId> <artifactId>undertow-websockets-jsr</artifactId> <version>${undertow.version}</version> </dependency> <!-- For debug logging (optional) --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>${logback.version}</version> </dependency>-
从红帽客户门户网站下载 Red Hat Process Automation Manager 7.12.0 Source Distribution,并进入
~/rhpam-7.12.0-sources/src/droolsjbpm-integration-$VERSION/kie-server-parent/kie-server-controller/kie-server-controller/kie-server-controller/src/main/java/org/kie/server/controller/client来访问流程自动化管理器 Java 客户端。 -
在
~/kie/server/controller/client文件夹中,识别您要发送的请求的相关 Java 客户端实施,如RestKieServerControllerClient实施,以访问 KIE Server 模板和 REST 协议中的 KIE 容器的客户端服务。 在您的客户端应用中,为 API 请求创建一个
.java类。类必须包含必要的导入、流程 Automation Manager 控制器位置和用户凭证、KieServerControllerClient对象和客户端方法来执行,如createServerTemplate和来自RestKieServerControllerClient实现的createContainer。根据您的用例调整任何配置详情。创建与 KIE Server 模板和 KIE 容器交互
import java.util.Arrays; import java.util.HashMap; import java.util.Map; import org.kie.server.api.marshalling.MarshallingFormat; import org.kie.server.api.model.KieContainerStatus; import org.kie.server.api.model.KieScannerStatus; import org.kie.server.api.model.ReleaseId; import org.kie.server.controller.api.model.spec.*; import org.kie.server.controller.client.KieServerControllerClient; import org.kie.server.controller.client.KieServerControllerClientFactory; public class RestTemplateContainerExample { private static final String URL = "http://localhost:8080/business-central/rest/controller"; private static final String USER = "baAdmin"; private static final String PASSWORD = "password@1"; private static KieServerControllerClient client; public static void main(String[] args) { KieServerControllerClient client = KieServerControllerClientFactory.newRestClient(URL, USER, PASSWORD, MarshallingFormat.JSON); // Create server template and KIE container, start and stop KIE container, and delete server template ServerTemplate serverTemplate = createServerTemplate(); ContainerSpec container = createContainer(serverTemplate); client.startContainer(container); client.stopContainer(container); client.deleteServerTemplate(serverTemplate.getId()); } // Re-create and configure server template protected static ServerTemplate createServerTemplate() { ServerTemplate serverTemplate = new ServerTemplate(); serverTemplate.setId("example-client-id"); serverTemplate.setName("example-client-name"); serverTemplate.setCapabilities(Arrays.asList(Capability.PROCESS.name(), Capability.RULE.name(), Capability.PLANNING.name())); client.saveServerTemplate(serverTemplate); return serverTemplate; } // Re-create and configure KIE containers protected static ContainerSpec createContainer(ServerTemplate serverTemplate){ Map<Capability, ContainerConfig> containerConfigMap = new HashMap(); ProcessConfig processConfig = new ProcessConfig("PER_PROCESS_INSTANCE", "kieBase", "kieSession", "MERGE_COLLECTION"); containerConfigMap.put(Capability.PROCESS, processConfig); RuleConfig ruleConfig = new RuleConfig(500l, KieScannerStatus.SCANNING); containerConfigMap.put(Capability.RULE, ruleConfig); ReleaseId releaseId = new ReleaseId("org.kie.server.testing", "stateless-session-kjar", "1.0.0-SNAPSHOT"); ContainerSpec containerSpec = new ContainerSpec("example-container-id", "example-client-name", serverTemplate, releaseId, KieContainerStatus.STOPPED, containerConfigMap); client.saveContainerSpec(serverTemplate.getId(), containerSpec); return containerSpec; } }从项目目录运行配置的
.java类来执行请求,并查看 Process Automation Manager 控制器响应。如果您启用了调试日志,KIE 服务器会根据您配置的 marshalling 格式(如 JSON)响应详细的响应。如果您遇到请求错误,请检查返回的错误消息并相应地调整 Java 配置。