首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

jBPM 4.1 整合 Spring 完整指南:事務管理、上下文共享與流程內調用 Bean

     編輯:Java 相關知識

核心變化:jBPM 4.1 原生支持 Spring 事務與上下文

jBPM 4.1 與 Tomcat 深度整合、提供 Web 建模器,Spring 整合配置集中在 `jbpm.cfg.xml` 導入 `jbpm.tx.spring.cfg.xml`。

關鍵配置:jbpm.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<jbpm-configuration>
  <import resource="jbpm.default.cfg.xml"/>
  <import resource="jbpm.tx.spring.cfg.xml"/> <!-- 關鍵:Spring 事務整合 -->
  <import resource="jbpm.jpdl.cfg.xml"/>
  <import resource="jbpm.identity.cfg.xml"/>
  <import resource="jbpm.businesscalendar.cfg.xml"/>
  <import resource="jbpm.jobexecutor.cfg.xml"/> <!-- 定時器/消息,生產必開 -->
  <import resource="jbpm/jbpm.mail.templates.examples.xml"/>
</jbpm-configuration>

工作日歷從 default 分離,整合邏輯封裝在 `jbpm.tx.spring.cfg.xml` 中。

Spring 事務攔截器配置 (jbpm.tx.spring.cfg.xml 核心片段)

<process-engine-context>
  <command-service>
    <spring-transaction-interceptor/> <!-- 替換標準事務攔截器 -->
    ...
  </command-service>
  ...
</process-engine-context>

<transaction-context>
  ...
  <hibernate-session current="true"/> <!-- 關鍵:使用 Spring 管理的當前 Session -->
  <!-- 移除 <transaction/> 元素,完全交給 Spring 管理事務 -->
</transaction-context>

原理:`spring-transaction-interceptor` 讓 jBPM 命令執行納入 Spring 事務邊界;`hibernate-session current="true"` 從 `TransactionSynchronizationManager` 獲取 Spring 綁定的 Session,實現 Hibernate Session 與 Spring 事務同步。

Spring 容器掛載 jBPM 服務

<bean id="jbpmConfiguration"
      class="org.jbpm.pvm.internal.cfg.SpringConfiguration">
  <constructor-arg value="classpath:jbpm.cfg.xml"/>
</bean>

<bean id="processEngine"
      factory-bean="jbpmConfiguration"
      factory-method="buildProcessEngine"/>

<bean id="repositoryService"
      factory-bean="processEngine"
      factory-method="getRepositoryService"/>
<bean id="executionService"
      factory-bean="processEngine"
      factory-method="getExecutionService"/>
<!-- taskService, historyService, managementService 同理 -->

`SpringConfiguration` 繼承 `JbpmConfiguration` 並自動註冊為 jBPM 上下文之一,使流程表達式可訪問 Spring Bean。

流程定義中調用 Spring Bean (JPDL)

<java name="echo" expr="#{echoService}" method="sayHello">
  <transition name="to accept" to="join1"/>
</java>
  • `expr="#{echoService}"`:EL 表達式解析 Spring Bean `echoService`。
  • 腳本引擎按順序搜索上下文,**Spring 為最後兜底**,優先匹配 jBPM 內置變量。
  • 也可在 jBPM 配置中 `` 引用 Spring Bean `identitySession` (如 `IdentitySessionImpl`)。

整合驗證清單

項目驗證方法
事務邊界Service 方法 `@Transactional`,拋異常回滾流程變更、業務數據
Session 同步流程變量持久化無 `Session closed` 異常
Bean 注入流程節點 `` 成功調用
JobExecutor定時器/消息正常觸發,無事務掛起
Web 建模器部署 `jbpm-console.war` 可視化設計流程

遷移提示:jBPM 3.x → 4.1

  • 配置文件結構變化大:`jbpm.cfg.xml` 替代 `hibernate.cfg.xml` + `jbpm-context.xml`。
  • API 包路徑變更:`org.jbpm.*` → `org.jbpm.pvm.*` / `org.jbpm.api.*`。
  • 流程定義語言:jPDL 3 → jPDL 4 (BPMN 2.0 風格),需重寫流程文件。
  • Spring 整合方式統一為 `SpringConfiguration` + `spring-transaction-interceptor`。

結語

jBPM 4.1 通過 `SpringConfiguration` 與 `spring-transaction-interceptor` 實現了**無縫 Spring 事務整合**與**雙向 Bean 訪問** (Spring 注入 jBPM 服務、流程調用 Spring Bean)。掌握 `jbpm.cfg.xml` 導入鏈、`hibernate-session current="true"`、EL 表達式 `#{beanName}` 三大核心點,即可在 Spring 生態中輕鬆駕馭流程引擎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved