第 68 章 与 Java 框架集成


您可以将流程引擎与多个行业标准 Java 框架(如 Apache Maven、CDI、Spring 和 EJB)集成。

68.1. 与 Apache Maven 集成

进程引擎将 Maven 用于两个主要目的:

  • 要创建 KJAR 工件,它们是进程引擎可安装到用于执行的运行时环境的部署单元
  • 管理用于构建嵌入进程引擎的应用程序的依赖关系

68.1.1. Maven 工件作为部署单元

进程引擎提供了一种机制,可从 Apache Maven 工件部署进程。这些工件采用 JAR 文件格式,称为 KJAR 文件,或者通知 KJARs。KJAR 文件包括定义 KIE 基础和 KIE 会话的描述符。它还包含业务资产,包括流程定义,流程引擎可加载到 KIE 基础中。

KJAR 文件描述符由名为 kie-deployment-descriptor.xml 的 XML 文件表示。描述符可以为空,在这种情况下,会应用默认配置。它还可以为 KIE 基本和 KIE 会话提供自定义配置。

kie-deployment-descriptor.xml 描述符。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<deployment-descriptor xsi:schemaLocation="http://www.jboss.org/jbpm deployment-descriptor.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <persistence-unit>org.jbpm.domain</persistence-unit>
    <audit-persistence-unit>org.jbpm.domain</audit-persistence-unit>
    <audit-mode>JPA</audit-mode>
    <persistence-mode>JPA</persistence-mode>
    <runtime-strategy>SINGLETON</runtime-strategy>
    <marshalling-strategies/>
    <event-listeners/>
    <task-event-listeners/>
    <globals/>
    <work-item-handlers />
    <environment-entries/>
    <configurations/>
    <required-roles/>
    <remoteable-classes/>
</deployment-descriptor>
Copy to Clipboard Toggle word wrap

带有一个空的 kie-deployment-descriptor.xml 描述符,会应用以下默认配置:

  • 创建一个默认的 KIE 基础,其特征如下:

    • 它包含 KJAR 文件中所有软件包的所有资产
    • 其事件处理模式被设置为
    • 它的 equivalenthaviour 设置为 identity
    • 它声明性声明性声明已被禁用
    • 对于 CDI 应用,其范围设置为 ApplicationScope
  • 创建单一默认的无状态 KIE 会话,特征如下:

    • 它绑定到单个 KIE 基础
    • 其时钟类型设置为 实时
    • 对于 CDI 应用,其范围设置为 ApplicationScope
  • 创建单一默认有状态 KIE 会话,特征如下:

    • 它绑定到单个 KIE 基础
    • 其时钟类型设置为 实时
    • 对于 CDI 应用,其范围设置为 ApplicationScope

如果您不想使用默认值,可以使用 kie-deployment-descriptor.xml 文件更改所有配置设置。您可以在 XSD schema 中找到此文件的所有元素的完整规格。

以下示例显示了配置运行时引擎的自定义 kie-deployment-descriptor.xml 文件。这个示例配置最常见的选项,并包含一个工作项目处理程序。您还可以使用 kie-deployment-descriptor.xml 文件来配置其他选项。

自定义 kie-deployment-descriptor.xml 文件示例

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<deployment-descriptor xsi:schemaLocation="http://www.jboss.org/jbpm deployment-descriptor.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <persistence-unit>org.jbpm.domain</persistence-unit>
    <audit-persistence-unit>org.jbpm.domain</audit-persistence-unit>
    <audit-mode>JPA</audit-mode>
    <persistence-mode>JPA</persistence-mode>
    <runtime-strategy>SINGLETON</runtime-strategy>
    <marshalling-strategies/>
    <event-listeners/>
    <task-event-listeners/>
    <globals/>
    <work-item-handlers>
        <work-item-handler>
            <resolver>mvel</resolver>
            <identifier>new org.jbpm.process.workitem.bpmn2.ServiceTaskHandler(ksession, classLoader)</identifier>
            <parameters/>
            <name>Service Task</name>
        </work-item-handler>
    </work-item-handlers>
    <environment-entries/>
    <configurations/>
    <required-roles/>
    <remoteable-classes/>
</deployment-descriptor>
Copy to Clipboard Toggle word wrap

注意

如果使用 RuntimeManager 类,则此类创建 KieSession 实例,而不是 KieContainer 类。但是,kie-deployment-descriptor.xml 模型始终用作构造过程的基础。KieContainer 类始终创建 KieBase 实例。

您可以使用 GAV(组、工件、版本)值引用 KJAR 工件,如任何其他 Maven 工件。当从 KJAR 文件部署单元时,进程引擎使用 GAV 值作为 KIE API 中的发行 ID。您可以使用 GAV 值将 KJAR 工件部署到运行时环境中,例如:KIE 服务器。

68.1.2. 使用 Maven 管理依赖项

构建嵌入进程引擎的项目时,请使用 Apache Maven 配置进程引擎所需的所有依赖项。

进程引擎提供一组 BOMs(资料的 Bills)来简化声明工件依赖项。

使用项目的顶级 pom.xml 文件来定义用于嵌入进程引擎的依赖关系管理,如下例所示。示例包括主要的运行时依赖项,这些依赖项适用于应用程序是否在 servlet 容器中部署或作为独立应用。

这个示例还包括应用程序使用进程引擎的应用程序的版本属性。根据需要调整组件和版本列表。您可以查看产品团队 在 Github 存储库中的父 pom.xml 文件中 测试的第三方依赖项版本。

用于嵌入进程引擎的 Maven 依赖项管理设置

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <version.org.drools>
    </version.org.drools>
    <version.org.jbpm>7.67.0.Final-redhat-00024</version.org.jbpm>
    <hibernate.version>5.3.17.Final</hibernate.version>
    <hibernate.core.version>5.3.17.Final</hibernate.core.version>
    <slf4j.version>1.7.26</slf4j.version>
    <jboss.javaee.version>1.0.0.Final</jboss.javaee.version>
    <logback.version>1.2.9</logback.version>
    <h2.version>1.3.173</h2.version>
    <narayana.version>5.9.0.Final</narayana.version>
    <jta.version>1.0.1.Final</jta.version>
    <junit.version>4.13.1</junit.version>
  </properties>
  <dependencyManagement>
    <dependencies>
      <!-- define Drools BOM -->
      <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-bom</artifactId>
        <type>pom</type>
        <version>${version.org.drools}</version>
        <scope>import</scope>
      </dependency>
      <!-- define jBPM BOM -->
      <dependency>
        <groupId>org.jbpm</groupId>
        <artifactId>jbpm-bom</artifactId>
        <type>pom</type>
        <version>${version.org.jbpm}</version>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
Copy to Clipboard Toggle word wrap

在使用进程引擎 Java API(KIE API)的模块中,声明所需的进程引擎依赖项和模块所需的其他组件,如下例所示:

使用 KIE API 的模块的依赖项

    <dependency>
      <groupId>org.jbpm</groupId>
      <artifactId>jbpm-flow</artifactId>
    </dependency>
    <dependency>
      <groupId>org.jbpm</groupId>
      <artifactId>jbpm-flow-builder</artifactId>
    </dependency>
    <dependency>
      <groupId>org.jbpm</groupId>
      <artifactId>jbpm-bpmn2</artifactId>
    </dependency>
    <dependency>
      <groupId>org.jbpm</groupId>
      <artifactId>jbpm-persistence-jpa</artifactId>
    </dependency>
    <dependency>
      <groupId>org.jbpm</groupId>
      <artifactId>jbpm-human-task-core</artifactId>
    </dependency>
    <dependency>
      <groupId>org.jbpm</groupId>
      <artifactId>jbpm-runtime-manager</artifactId>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>${slf4j.version}</version>
    </dependency>
Copy to Clipboard Toggle word wrap

如果您的应用程序使用持久性和事务,您必须添加实施 JTA 和 JPA 框架的工件。在实际部署前测试工作流组件需要其他依赖项。

以下示例定义了包括 JPA 的 Hibernate、用于持久性的 H2 数据库、JTA 的 Narayana 以及测试所需的组件的依赖项。这个示例使用 test 范围。根据您的应用程序需要调整这个示例。对于生产环境,请删除 测试 范围。

进程引擎的测试模块依赖项示例

    <!-- test dependencies -->
    <dependency>
      <groupId>org.jbpm</groupId>
      <artifactId>jbpm-shared-services</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>${logback.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-entitymanager</artifactId>
      <version>${hibernate.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>${hibernate.core.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
      <version>${h2.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>jboss-transaction-api_1.2_spec</groupId>
      <artifactId>org.jboss.spec.javax.transaction</artifactId>
      <version>${jta.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.jboss.narayana.jta</groupId>
      <artifactId>narayana-jta</artifactId>
      <version>${narayana.version}</version>
      <scope>test</scope>
    </dependency>
Copy to Clipboard Toggle word wrap

使用这个配置,您可以在应用程序中嵌入进程引擎,并使用 KIE API 与进程、规则和事件交互。

Maven 存储库

要使用 Red Hat 产品版本的 Maven 依赖项,您必须在顶层 pom.xml 文件中配置 Red Hat JBoss Enterprise Maven 存储库。有关此软件仓库的详情,请查看 JBoss Enterprise Maven Repository

或者,从红帽客户门户网站的软件下载页面下载 rhpam-7.13.5-maven-repository.zip 产品交付的文件,并将此文件的内容作为本地 Maven 存储库提供。https://access.redhat.com/jbossnetwork/restricted/listSoftware.html?downloadType=distributions&product=rhpam&productChanged=yes

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat