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

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

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

    posts - 193,  comments - 520,  trackbacks - 0
           現在流行抱大腿,不過對眼光的要求也高。要不就如高也,即使四眼,一樣無用。對Java企業開發而言,Spring的腿則是一定要抱的。而所謂抱Spring的腿,無外乎三點:

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

            下面分別討論:

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

    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暴露這些服務,配置如下:
    <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" />


    細心的你會發現,配置時使用了JbpmConfiguration 的子類SpringConfiguration。SpringConfiguration相比JbpmConfiguration有哪些增強呢,下面再講。總之,現在,就可以使用Spring來獲取或注入這些Jbpm4所提供的服務了。

    二、在environment里加入SpringContext
    jBPM4的environment(運行期環境)提供Engine IOC(process-engine-context)和Transaction IOC(transaction-context)。要想在運行期方便地訪問到Spring里所配置的服務,最直接的方法就是在environment里加入Spring IOC(applicationContext)的引用。
    SpringConfiguration即是對JbpmConfiguration增強了對Spring IOC的一個引用。
     
    SpringConfiguration是如何做到的呢?簡單,實現Spring的ApplicationContextAware接口,自動持有applicationContext,然后openEnvironment時將其加入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 />

     
    相關配置挪動至Spring配置文件。

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

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


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

    3、    集成入Spring的事務實現
    Spring的事務是基于服務調用的。

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


    攔截器換用SpringTransactionInterceptor,SpringTransactionInterceptor從environment 提供的Spring IOC獲取PlatformTransactionManager,使用事務模板回調Command,事務傳播模式強制加入當前事務。

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

    并干掉原有的事務實現:
    <transaction />

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




    http://m.tkk7.com/ronghao 榮浩原創,轉載請注明出處:)
    posted on 2009-06-22 16:38 ronghao 閱讀(7375) 評論(7)  編輯  收藏 所屬分類: JbpmSide

    FeedBack:
    # re: jBPM4與Spring的集成
    2009-06-22 17:28 | 魔之左手
    學些了 頂頂  回復  更多評論
      
    # re: jBPM4與Spring的集成
    2009-06-23 18:54 | Bang
    不錯,很有原創精神。

      回復  更多評論
      
    # re: jBPM4與Spring的集成
    2009-09-04 22:04 | ffsmq
    頂 原創。  回復  更多評論
      
    # re: jBPM4與Spring的集成
    2009-10-11 10:07 | vanlin
    博主高手,,學習中。  回復  更多評論
      
    # re: jBPM4與Spring的集成
    2010-02-26 10:36 | money
    Gao Gao  回復  更多評論
      
    # re: jBPM4與Spring的集成[未登錄]
    2010-05-21 14:29 | Jordan
    學習中, 謝謝斑竹啦!  回復  更多評論
      
    # re: jBPM4與Spring的集成
    2010-07-26 20:45 | darren
    jbpm.cfm.xml文件里根本沒有process-engine-context啊,看你的文章還是配不對,你說了原理,可是細節,還是不行,麻煩能弄個demo  回復  更多評論
      
    <2009年10月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    關注工作流和企業業務流程改進。現就職于ThoughtWorks。新浪微博:http://weibo.com/ronghao100

    常用鏈接

    留言簿(38)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    常去的網站

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲男人都懂得羞羞网站| 日本高清色本免费现在观看| 亚洲国产婷婷香蕉久久久久久| 亚洲啪AV永久无码精品放毛片 | 亚洲AV无码乱码在线观看| 久久精品国产亚洲AV| 免费无码一区二区三区蜜桃大 | 亚洲精品GV天堂无码男同| 国产在线国偷精品产拍免费| 久久亚洲精品国产精品婷婷| 69堂人成无码免费视频果冻传媒| 亚洲制服丝袜精品久久| 无码国产精品一区二区免费式影视| 亚洲一级毛片免费观看| 成年女人看片免费视频播放器| 亚洲成在人线在线播放无码| 免费A级毛片无码久久版| xxxxx做受大片在线观看免费| 亚洲精品成人无限看| 91精品免费观看| 亚洲夂夂婷婷色拍WW47| 波多野结衣一区二区免费视频| 巨胸狂喷奶水视频www网站免费| 亚洲av无码乱码国产精品fc2| 99ee6热久久免费精品6| 亚洲人成网站在线播放2019 | 亚洲AV日韩AV鸥美在线观看| 无遮免费网站在线入口| 国产一区二区三区亚洲综合| 国产亚洲午夜高清国产拍精品 | 日本免费v片一二三区| 一出一进一爽一粗一大视频免费的| 国产精品国产亚洲精品看不卡| 24小时在线免费视频| 亚洲av成人片在线观看| 国产亚洲精品岁国产微拍精品| 免费h片在线观看网址最新| 亚洲AV无码专区亚洲AV桃| 亚洲乱码中文字幕久久孕妇黑人| 亚州免费一级毛片| 人成免费在线视频|