Spring与Jbpm的整合
1,整合的必要性:
流程中对业务数据操作与流程操作需要在同一个事务中实现
例如:请假流程——请假人提交请假申请,流程跳转到下一个节点任务(JBPM数据);记录请假人信息到用户表(业务数据)
一个操作,可能会同时涉及到JBPM数据和业务数据,如果用两个事务,可能会导致业务与流程的数据不一致。
2,整合图
整合原理:
(1)使用Spring容器IOC提供的BeanFactory功能初始化JBPM的configuration。
(2)使业务数据与JBPM公用sessionFactory。
3,Spring与Jbpm整合的核心:
(1)由Spring容器产生processEngine
(2)Jbpm的事务交给spring处理
4,整合步骤
* 导入jbpm的jar包
* 删除db和hibernate的jar包
* 在config下创建一个配置文件
config/jbpm
jbpm.cfg.xml
jbpm.hibernate.cfg.xml
* jbpm.cfg.xml文件中
<import resource="jbpm.tx.hibernate.cfg.xml" />
改为
<import resource="jbpm.tx.spring.cfg.xml" />
统一由spring处理事务,由右边的配置可以看出是通过创建新的session从而开启事务的
* jbpm.hibernate.cfg.xml文件中
* 数据库的连接配置
<propertyname="current_session_context_class">thread</property>
这行配置不能写,不能从当前线程中获取session
* OA项目本身的表的映射文件
* jbpm的表的映射文件
* spring的配置文件
* hibernate配置文件的路径修改
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:jbpm/jbpm.hibernate.cfg.xml</value>
</property>
</bean>
* 让spring产生processEngine
<bean id="springHelper"class="org.jbpm.pvm.internal.processengine.SpringHelper">
<property name="jbpmCfg"value="jbpm/jbpm.cfg.xml"></property>
</bean>
<bean id="processEngine" factory-bean="springHelper"
factory-method="createProcessEngine" />
注意jbpm.cfg.xml配置文件的路径
5,总结:
JBPM与SSH整合——让Spring管理生成ProcessEngine,让Hibernate生成JBPM实体数据库表。