要知道如何將jBPM4與Spring整合,可以先了解jBPM4的IOC容器,如果不了解的可以先看ronghao的這篇文章
http://www.iteye.com/topic/381607
,是介紹jBPM4的IOC容器的。下面我們介紹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。比如:
??
ProcessEngine processEngine = (ProcessEngine) ctx.getBean("processEngine"); RepositoryService repositoryService = processEngine.getRepositoryService();。
第2種:獲得Hibernate的SessionFactory。
? 第1步:與第一種方式的第1步一樣。
? 第2步:更改jbpm.tx.spring.cfg.xml配置文件:
? 將?????
????
- < spring-transaction-interceptor ? current = "true" ? /> ??
<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; }
??? 這里我的理解是我們在上面已經將事務改成從當前的Threadlocal中獲得,所以jBPM4是必須當前有事務,如果我沒有創建事務的話,在使用processEngine時就會說事務沒有啟動。所以我們就封裝了一個jbpmTemplate,如果我的理解有誤還請大家指出。
?? 第1種整合方式我會提供一個例子,第2種整合方式之后可以看我們的jBPM-Side里的控制臺。
- jbpm4spring.rar (117.8 KB)
- 下載次數: 281
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
