3.3. 在 Java 应用程序中打包和部署 Red Hat Process Automation Manager 项目
如果要从您自己的 Java 应用程序部署项目到配置的 KIE 服务器,您可以使用 KieModuleModel 实例以编程方式创建一个 kmodule.xml 文件,该文件定义 KIE 基础和 KIE 会话,然后将项目中的所有资源添加到 KIE 虚拟文件系统 KieFileSystem 中。
先决条件
- 您有一个包含 Red Hat Process Automation Manager 商业资产的 Java 应用程序。
-
KIE 服务器已安装,并且配置了
kie-server用户访问。有关安装选项,请参阅 规划 Red Hat Process Automation Manager 安装。
流程
(可选)如果您的项目包含 Decision Model 和 Notation (DMN)资产,请在 Java 项目的相关类路径中添加以下依赖项以启用 DMN 可执行模型。DMN 可执行模型可让 DMN 项目中的 DMN 决策表逻辑更有效地评估。
<dependency> <groupId>org.kie</groupId> <artifactId>kie-dmn-core</artifactId> <scope>provided</scope> <version>${rhpam.version}</version> </dependency>&
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>有关 Red Hat Business Automation BOM 的更多信息,请参阅 Red Hat Process Automation Manager 和 Maven 库版本之间的映射是什么?
使用
KieServicesAPI 创建带有所需 KIE 基础和 KIE 会话的KieModuleModel实例。KieServicesAPI 可让您访问所有 KIE 构建和运行时配置。KieModuleModel实例为您的项目生成kmodule.xml文件。有关
kmodule.xml配置的详情,请参考 第 3.1 节 “配置 KIE 模块描述符文件”。将您的
KieModuleModel实例转换为 XML,并将 XML 添加到KieFileSystem。以编程方式创建
kmodule.xml,并将其添加到KieFileSystemimport org.kie.api.KieServices; import org.kie.api.builder.model.KieModuleModel; import org.kie.api.builder.model.KieBaseModel; import org.kie.api.builder.model.KieSessionModel; import org.kie.api.builder.KieFileSystem; KieServices kieServices = KieServices.Factory.get(); KieModuleModel kieModuleModel = kieServices.newKieModuleModel(); KieBaseModel kieBaseModel1 = kieModuleModel.newKieBaseModel("KBase1") .setDefault(true) .setEqualsBehavior(EqualityBehaviorOption.EQUALITY) .setEventProcessingMode(EventProcessingOption.STREAM); KieSessionModel ksessionModel1 = kieBaseModel1.newKieSessionModel("KSession1") .setDefault(true) .setType(KieSessionModel.KieSessionType.STATEFUL) .setClockType(ClockTypeOption.get("realtime")); KieFileSystem kfs = kieServices.newKieFileSystem(); kfs.writeKModuleXML(kieModuleModel.toXML());将项目中使用的剩余的 Red Hat Process Automation Manager 资产添加到 KieFileSystem
实例中。工件必须采用 Maven 项目文件结构。import org.kie.api.builder.KieFileSystem; KieFileSystem kfs = ... kfs.write("src/main/resources/KBase1/ruleSet1.drl", stringContainingAValidDRL) .write("src/main/resources/dtable.xls", kieServices.getResources().newInputStreamResource(dtableFileStream));在本例中,项目资产同时添加为
String变量和Resource实例。您可以使用KieResources工厂创建Resource实例,也由KieServices实例提供。KieResources类提供了将InputStream,URL, 和File对象,或一个代表您的文件系统路径的String转换到一个KieFileSystem可以管理的Resource实例的方法。当将项目工件添加到
KieFileSystem时,您还可以为Resource对象明确分配一个ResourceType属性:import org.kie.api.builder.KieFileSystem; KieFileSystem kfs = ... kfs.write("src/main/resources/myDrl.txt", kieServices.getResources().newInputStreamResource(drlStream) .setResourceType(ResourceType.DRL));使用带有
buildAll ()方法的KieBuilder来构建KieFileSystem的内容,并创建一个 KIE 容器来部署它:import org.kie.api.KieServices; import org.kie.api.KieServices.Factory; import org.kie.api.builder.KieFileSystem; import org.kie.api.builder.KieBuilder; import org.kie.api.runtime.KieContainer; KieServices kieServices = KieServices.Factory.get(); KieFileSystem kfs = ... KieBuilder kieBuilder = ks.newKieBuilder( kfs ); kieBuilder.buildAll() assertEquals(0, kieBuilder.getResults().getMessages(Message.Level.ERROR).size()); KieContainer kieContainer = kieServices .newKieContainer(kieServices.getRepository().getDefaultReleaseId());构建
ERROR表示项目编译失败,没有生成KieModule,且不会将任何内容添加到KieRepository单例中。WARNING或INFO结果表示项目的编译成功,其中包含构建过程的相关信息。注意要从可执行规则模型构建 Java 应用程序项目中的规则资产,请验证以下依赖项是否在项目的
pom.xml文件中:<dependency> <groupId>org.drools</groupId> <artifactId>drools-model-compiler</artifactId> <version>${rhpam.version}</version> </dependency>Red Hat Process Automation Manager 中的规则资产需要这个依赖项,才能从可执行规则模型构建。此依赖项作为 Red Hat Process Automation Manager 核心打包的一部分包括,但取决于您的 Red Hat Process Automation Manager 升级历史记录,您可能需要手动添加此依赖项来启用可执行的规则模型行为。
验证依赖项后,使用以下修改后的
buildAll ()选项来启用可执行模型:kieBuilder.buildAll(ExecutableModelProject.class)有关可执行规则模型的详情请参考 第 3.4 节 “可执行规则模型”。