程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> jBPM4與Spring整合的2種方式

jBPM4與Spring整合的2種方式

編輯:關於JAVA

要知道如何將jBPM4與Spring整合,可以先了解jBPM4的IOC容器,如果不了解的可以先看這篇文章(主 題:Jbpm4的IOC容器),是介紹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>

第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配置文件:

     <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;
     }

這裡我的理解是我們在上面已經將事務改成從當前的Threadlocal中獲得,所以jBPM4是必須當前有事 務,如果我沒有創建事務的話,在使用 processEngine時就會說事務沒有啟動。所以我們就封裝了一個 jbpmTemplate,如果我的理解有誤還請大家指出。

第1種整合方式的例子下載http://www.family168.com/demo/jbpm4spring.rar,第2種整合方式之後可 以看我們的jBPM-Side裡的控制台。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved