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 安装

流程

  1. 可选:如果您的项目包含 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.52.0.Final-redhat-00007)。

    注意

    考虑将 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.11.0.redhat-00005</version>
      <scope>import</scope>
      <type>pom</type>
    </dependency>

    有关 Red Hat Business Automation BOM 的更多信息,请参阅 Red Hat Process Automation Manager 和 Maven 库版本之间的映射是什么?

  2. 使用 KieServices API 创建带有所需 KIE 基础和 KIE 会话的 KieModuleModel 实例。KieServices API 可让您访问所有 KIE 构建和运行时配置。KieModuleModel 实例为您的项目生成 kmodule.xml 文件。

    有关 kmodule.xml 配置的详情,请参考 第 3.1 节 “配置 KIE 模块描述符文件”

  3. 将您的 KieModuleModel 实例转换为 XML,并将 XML 添加到 KieFileSystem

    以编程方式创建 kmodule.xml,并将其添加到 KieFileSystem

    import 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());

  4. 将项目中使用的剩余的 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));
  5. 使用带有 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 单例中。WARNINGINFO 结果表示项目的编译成功,其中包含构建过程的相关信息。

    注意

    要从可执行规则模型构建 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 节 “可执行规则模型”