posts - 26,comments - 77,trackbacks - 0
          要知道如何將jBPM4與Spring整合,可以先了解jBPM4的IOC容器,如果不了解的可以先看ronghao的這篇文章http://www.javaeye.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中創(chuàng)建了sessionFactory,而我們只需要一個(gè)sessionFactory。既然要將jBPM4與Spring的整 合,那就希望由Spring來統(tǒng)一管理sessionFactory和事務(wù),在Spring的配置文件中構(gòu)造一個(gè)sessionFactory。 ProcessEngine是jBPM4的Facade模式,一切由它與外部交互,
            第2步:在Spring配置文件中寫一個(gè)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中創(chuàng)建一個(gè)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創(chuàng)建的spring事務(wù)和hibernate的session改成從當(dāng)前的ThreadLocal中獲得session和事務(wù)。
          第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主要是控制事務(wù),在processEngine外面創(chuàng)建事務(wù),這樣使用的時(shí)候會(huì)先調(diào)用jbpmTemplate,再調(diào)用processEngine,否則它會(huì)說事務(wù)沒有啟動(dòng)。在jbpmTemplate中注入processEngine:
              public void setProcessEngine(ProcessEngine processEngine) {
                  this.processEngine = processEngine;
              }
              這里我的理解是我們在上面已經(jīng)將事務(wù)改成從當(dāng)前的Threadlocal中獲得,所以jBPM4是必須當(dāng)前有事務(wù),如果我沒有創(chuàng)建事務(wù)的話,在使用 processEngine時(shí)就會(huì)說事務(wù)沒有啟動(dòng)。所以我們就封裝了一個(gè)jbpmTemplate,如果我的理解有誤還請大家指出。
             第1種整合方式的例子下載http://www.family168.com/,第2種整合方式之后可以看我們的jBPM-Side里的控制臺(tái)。

          posted on 2009-06-29 13:27 卡宴 閱讀(1487) 評(píng)論(0)  編輯  收藏 所屬分類: jBPM
          主站蜘蛛池模板: 罗平县| 溆浦县| 察隅县| 新晃| 临汾市| 吉安市| 高碑店市| 玉门市| 巴东县| 顺平县| 东安县| 靖边县| 讷河市| 珠海市| 盐池县| 五寨县| 乐亭县| 新田县| 合川市| 波密县| 增城市| 荆门市| 瑞昌市| 平谷区| 鄂温| 浦县| 东山县| 黄骅市| 昌宁县| 高密市| 棋牌| 宜兰县| 乐至县| 富宁县| 克山县| 佛冈县| 会泽县| 迁西县| 公主岭市| 玉溪市| 杭锦旗|