<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Vanlin Study Club

    Java Js Flex

    jBPM4與Spring的集成[轉(zhuǎn)載]

           現(xiàn)在流行抱大腿,不過對眼光的要求也高。要不就如高也,即使四眼,一樣無用。對Java企業(yè)開發(fā)而言,Spring的腿則是一定要抱的。而所謂抱Spring的腿,無外乎三點(diǎn):

    一是通過Spring暴露出服務(wù),將服務(wù)配置到Spring的IOC容器里;
    二是在自己的運(yùn)行環(huán)境里訪問到Spring的IOC容器,能夠輕松使用Spring容器里所配置的服務(wù);
    三是對于具有事務(wù)管理特性的項(xiàng)目來說,將事務(wù)管理與Spring的事務(wù)管理進(jìn)行合并。

            下面分別討論:

    一、    通過Spring暴露服務(wù)
    還記得在jBPM4的運(yùn)行期環(huán)境里提到的JbpmConfiguration嗎?它是整個(gè)jBPM4的入口,并且是整個(gè)應(yīng)用獨(dú)此一份的。通過它可以獲取processEngine,并藉此獲得工作流引擎所提供的各種服務(wù):

    ProcessEngine processEngine 
    = new Configuration()
          .buildProcessEngine();


    RepositoryService repositoryService 
    = processEngine.getRepositoryService();
    ExecutionService executionService 
    = processEngine.getExecutionService();
    TaskService taskService 
    = processEngine.getTaskService();
    HistoryService historyService 
    = processEngine.getHistoryService();
    ManagementService managementService 
    = processEngine.getManagementService();

    通過Spring暴露這些服務(wù),配置如下:
    <bean id="jbpmConfiguration" class="org.jbpm.pvm.internal.cfg.SpringConfiguration">
            
    <constructor-arg value="be/inze/spring/demo/jbpm.cfg.xml" />
        
    </bean>
       
        
    <bean id="processEngine" factory-bean="jbpmConfiguration" factory-method="buildProcessEngine" />
        
    <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
        
    <bean id="executionService" factory-bean="processEngine" factory-method="getExecutionService" />


    細(xì)心的你會(huì)發(fā)現(xiàn),配置時(shí)使用了JbpmConfiguration 的子類SpringConfiguration。SpringConfiguration相比JbpmConfiguration有哪些增強(qiáng)呢,下面再講??傊?,現(xiàn)在,就可以使用Spring來獲取或注入這些Jbpm4所提供的服務(wù)了。

    二、在environment里加入SpringContext
    jBPM4的environment(運(yùn)行期環(huán)境)提供Engine IOC(process-engine-context)和Transaction IOC(transaction-context)。要想在運(yùn)行期方便地訪問到Spring里所配置的服務(wù),最直接的方法就是在environment里加入Spring IOC(applicationContext)的引用。
    SpringConfiguration即是對JbpmConfiguration增強(qiáng)了對Spring IOC的一個(gè)引用。
     
    SpringConfiguration是如何做到的呢?簡單,實(shí)現(xiàn)Spring的ApplicationContextAware接口,自動(dòng)持有applicationContext,然后openEnvironment時(shí)將其加入environment。

    environment.setContext(new SpringContext(applicationContext));


    SpringContext是對applicationContext的簡單封裝。

    那么什么從Engine IOC移民到Spring IOC了呢?是的,最重要的就是Hibernate Session Factory。

    在jbpm.cfg.xml的process-engine-context里干掉:

        <hibernate-configuration>
          
    <cfg resource="jbpm.hibernate.cfg.xml" />    
        
    </hibernate-configuration>

        
    <hibernate-session-factory />

      
    相關(guān)配置挪動(dòng)至Spring配置文件。

    三、    事務(wù)
    哪里有數(shù)據(jù)庫操作,哪里就有事務(wù)。對于嵌入式工作流而言,最重要的集成就是事務(wù)的集成。這里先分析jBPM4的事務(wù)實(shí)現(xiàn),然后再介紹集成入Spring的事務(wù)實(shí)現(xiàn)。

    1、    Command模式
    jBPM4的邏輯實(shí)現(xiàn)采用了Command模式。
     
    采用Command模式后,jBPM4對CommandService構(gòu)造攔截器(Interceptor)鏈,配置在jbpm.cfg.xml的process-engine-context里:
    <command-service>
          
    <retry-interceptor />
          
    <environment-interceptor />
          
    <standard-transaction-interceptor />
        
    </command-service>


    2、    原有的事務(wù)實(shí)現(xiàn)
    jBPM4原有的事務(wù)通過StandardTransactionInterceptor實(shí)現(xiàn),在CommandService執(zhí)行Command之前打開事務(wù)(實(shí)際委派Hibernate的事務(wù)管理),完成后提交/回滾。
     
    jBPM4的事務(wù)是基于Command的。

    3、    集成入Spring的事務(wù)實(shí)現(xiàn)
    Spring的事務(wù)是基于服務(wù)調(diào)用的。

    使jBPM4使用Spring提供的事務(wù):
    <command-service>
          
    <retry-interceptor />
          
    <environment-interceptor />
          
    <spring-transaction-interceptor current="true" />
    </command-service>


    攔截器換用SpringTransactionInterceptor,SpringTransactionInterceptor從environment 提供的Spring IOC獲取PlatformTransactionManager,使用事務(wù)模板回調(diào)Command,事務(wù)傳播模式強(qiáng)制加入當(dāng)前事務(wù)。

    同時(shí),對hibernate session的配置(jbpm.cfg.xml的transaction-context)強(qiáng)制從當(dāng)前線程中獲取:
    <hibernate-session current="true"/>

    并干掉原有的事務(wù)實(shí)現(xiàn):
    <transaction />

    參考文檔:
    http://www.slideshare.net/guest8d4bce/spring-integration-with-jbpm4




    http://www.tkk7.com/ronghao 榮浩原創(chuàng)

    posted on 2009-10-11 10:09 vanlin 閱讀(232) 評(píng)論(0)  編輯  收藏 所屬分類: jbpm

    主站蜘蛛池模板: 亚洲无圣光一区二区| 亚洲欧洲日产国码久在线观看| 亚洲国产精品综合久久20| 69国产精品视频免费| 亚洲欧洲日韩不卡| 日韩中文字幕免费视频| 久久久久亚洲AV无码麻豆| 三年片在线观看免费观看大全动漫| 亚洲图片在线观看| 最近免费2019中文字幕大全| 亚洲成a人片在线观看播放| 中文字幕免费视频| 久久狠狠爱亚洲综合影院| aa级一级天堂片免费观看| 亚洲乱亚洲乱妇无码| 国产免费午夜a无码v视频| 国产成人久久精品亚洲小说| 亚洲人成网站在线观看青青| 中文字幕不卡免费视频| 亚洲尹人香蕉网在线视颅| 少妇高潮太爽了在线观看免费| 日韩国产精品亚洲а∨天堂免| 亚洲国产婷婷综合在线精品 | 亚洲人成自拍网站在线观看| 日韩免费毛片视频| 久久一区二区免费播放| 久久精品国产亚洲av影院| 久久精品a一国产成人免费网站| 亚洲AV无码成人精品区日韩| 亚洲v国产v天堂a无码久久| 大地资源网高清在线观看免费| 78成人精品电影在线播放日韩精品电影一区亚洲 | 免费无遮挡无遮羞在线看 | 亚洲精品第五页中文字幕| 成人最新午夜免费视频| 日韩免费在线中文字幕| 亚洲自偷自偷精品| 在线日韩av永久免费观看| 国内精品免费在线观看| 99久久国产亚洲综合精品| 亚洲午夜成人精品电影在线观看|