jBPM4与Spring整合的2种方式(二)
操作方法
- 01
前面达内IT培训为大家总结有关jBPM4与Spring整合的2种方式的一种方法,现在我们继续学习第二种方法,希望大家喜欢。 第2种:获得Hibernate的SessionFactory。 第1步:与第一种方式的第1步一样。 第2步:更改jbpm.tx.spring.cfg.XML配置文件: 将 <standard-transaction-interceptor/> 改成 <spring-transaction-interceptor current="true" /> 然后将 <transaction/> <hibernate-session/> 改成 <hibernate-session current="true"/> 这部分修改是将jBPM4创建的spring事务和hibernate的session改成从当前的ThreadLocal中获得session和事务。第3步:在Spring配置文件中写bean,processEngine和template: <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="jbpmTemplate" class="com.family168.jbpm.JbpmTemplate"> <property name="processEngine" ref="processEngine"/> <property name="dataSource" ref="dataSource"/> </bean>processEngine直接使用factory-bean指向jbpmConfiguration,也就是 org.jbpm.pvm.internal.cfg.SpringConfiguration,并从SpringConfiguration的 buildProcessEngine中获得。jbpmTemplate主要是控制事务,在processEngine外面创建事务,这样使用的时候会先调用jbpmTemplate,再调用processEngine,否则它会说事务没有启动。在jbpmTemplate中注入processEngine: public void setProcessEngine(ProcessEngine processEngine) { this.processEngine = processEngine; } 达内IT培训集团总结:这里我的理解是我们在上面已经将事务改成从当前的Threadlocal中获得,所以jBPM4是必须当前有事务,如果我没有创建事务的话,在使用 processEngine时就会说事务没有启动。所以我们就封装了一个jbpmTemplate,如果我的理解有误还请大家指出。