記錄 jBPM 4.0 與 Spring 2.5.6 原生整合的完整配置結構與關鍵文件,採用 SpringConfiguration 載入 jBPM 設定,由 Spring 管理 ProcessEngine 及各服務 Bean。
src/resources
├── jbpm/
│ ├── jbpm.cfg.xml
│ ├── jbpm.default.cfg.xml
│ ├── jbpm.tx.hibernate.cfg.xml
│ ├── jbpm.mail.properties
│ ├── jbpm.mail.templates.examples.xml
│ └── logging.properties
└── spring/
├── applicationContext-jbpm.xml
└── applicationContext-hibernate.xml
<jbpm-configuration>
<import resource="jbpm/jbpm.default.cfg.xml" />
<import resource="jbpm/jbpm.tx.hibernate.cfg.xml" />
<import resource="jbpm.jpdl.cfg.xml" />
<import resource="jbpm.identity.cfg.xml" />
<import resource="jbpm/jbpm.mail.templates.examples.xml" />
<process-engine-context>
<command-service>
<retry-interceptor />
<environment-interceptor />
<spring-transaction-interceptor /> <!-- 關鍵:接管事務 -->
</command-service>
</process-engine-context>
<transaction-context>
<transaction />
<hibernate-session />
</transaction-context>
</jbpm-configuration>
定義 repository-service、execution-service、task-service 等核心服務;配置 JUEL 腳本引擎;內建任務通知/提醒郵件模板;定義工作日曆與假期。
<jbpm-configuration>
<process-engine-context>
<command-service>
<spring-transaction-interceptor current="true" /> <!-- 使用 Spring 當前事務 -->
</command-service>
</process-engine-context>
<transaction-context>
<hibernate-session current="true"/> <!-- 綁定 Spring 的 Current Session -->
</transaction-context>
</jbpm-configuration>
<beans>
<bean id="jbpmConfiguration" class="org.jbpm.pvm.internal.cfg.SpringConfiguration">
<constructor-arg value="jbpm/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" />
<bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
<bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />
<bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
<bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService" />
</beans>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="mappingResources">
<list>
<value>jbpm.repository.hbm.xml</value>
<value>jbpm.execution.hbm.xml</value>
<value>jbpm.history.hbm.xml</value>
<value>jbpm.task.hbm.xml</value>
<value>jbpm.identity.hbm.xml</value>
</list>
</property>
</bean>
確保 classpath 包含:jbpm-pvm.jar、jbpm-jpdl.jar、spring-orm.jar、hibernate3.jar、juel-api/impl.jar 及資料庫驅動。缺包將導致 NoClassDefFoundError 或映射異常。