首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

JBPM4与Spring调整的2种方式 (转)备忘

2012-10-29 
JBPM4与Spring整合的2种方式(转)备忘JBPM4与Spring整合的2种方式? 下面我们介绍jBPM与Spring整合的2种方式

JBPM4与Spring整合的2种方式 (转)备忘

JBPM4与Spring整合的2种方式?

下面我们介绍jBPM与Spring整合的2种方式:
?
第一种:手工将SessionFactory放入jBPM4中。

第1步:更改jbpm.spring.default.cfg.xml配置文件,将下面的部分注释掉
<!-- ??
???<hibernate-configuration>??
?????<cfg?resource="jbpm.hibernate.cfg.xml"?/>??
???</hibernate-configuration>??
??
???<hibernate-session-factory?/>??
?-->
部分是在jBPM4中创建了sessionFactory,而我们只需要一个sessionFactory。既然要将jBPM4与Spring的整合,那就希望由Spring来统一管理sessionFactory和事务,在Spring的配置文件中构造一个sessionFactory。ProcessEngine是jBPM4的Facade模式,一切由它与外部交互。

????
第2步:在Spring配置文件中写一个bean:
<bean?id="processEngine"?class="com.family168.jbpm.ProcessEngineFactoryBean">??
????????<property?name="sessionFactory"?ref="sessionFactory"/>??
?</bean>??
<bean?id="processEngine"?class="com.family168.jbpm.ProcessEngineFactoryBean">??
????????<property?name="sessionFactory"?ref="sessionFactory"/>??
?</bean>??

第3步:在ProcessFactoryBean中注入SessionFactory:
public?void?setSessionFactory(SessionFactory?sessionFactory)?{ ??
??????this.sessionFactory?=?sessionFactory; ??
}??

第4步:在ProcessFactoryBean中创建一个SpringConfiguration,然后将sessionFactory放入SpringConfiguration中,再从SpringConfiguration得到processEngine,代码如下:?
public?void?afterPropertiesSet()?{ ??
????????SpringConfiguration?cfg?=?new??SpringConfiguration(jbpmConfigurationLocation); ??
????????cfg.setApplicationContext(applicationContext); ??
??
????????cfg.setSessionFactory(sessionFactory); ??
????????this.processEngine?=?cfg.buildProcessEngine(); ??
????}??
然后我们的工作就可以开展了,可以从processEngine得到所有的service。比如:?
?Java代码?
ProcessEngine?processEngine?=?(ProcessEngine)?ctx.getBean("processEngine");???
RepositoryService?repositoryService?=?processEngine.getRepositoryService();。

第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; ??????}
public void setProcessEngine(ProcessEngine processEngine) {          this.processEngine = processEngine;      }这里在上面已经将事务改成从当前的Threadlocal中获得,所以jBPM4是必须当前有事务,如果没有创建事务的话

热点排行