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

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

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

    Terry.Li-彬

    虛其心,可解天下之問;專其心,可治天下之學(xué);靜其心,可悟天下之理;恒其心,可成天下之業(yè)。

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
    ?????? 現(xiàn)在流行抱大腿,不過對眼光的要求也高。要不就如高也,即使四眼,一樣無用。對Java企業(yè)開發(fā)而言,Spring的腿則是一定要抱的。而所謂抱Spring的腿,無外乎三點:

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

    ??????? 下面分別討論:

    一、??? 通過Spring暴露服務(wù)
    還記得在jBPM4的運行期環(huán)境里提到的JbpmConfiguration嗎?它是整個jBPM4的入口,并且是整個應(yīng)用獨此一份的。通過它可以獲取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"?/>


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

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

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

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

    1、??? Command模式
    jBPM4的邏輯實現(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ù)實現(xiàn)
    jBPM4原有的事務(wù)通過StandardTransactionInterceptor實現(xiàn),在CommandService執(zhí)行Command之前打開事務(wù)(實際委派Hibernate的事務(wù)管理),完成后提交/回滾。
    ?
    jBPM4的事務(wù)是基于Command的。

    3、??? 集成入Spring的事務(wù)實現(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ù)傳播模式強制加入當前事務(wù)。

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

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

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

    posted on 2009-07-14 13:14 禮物 閱讀(349) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。

    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 日韩在线播放全免费| 亚洲国产成人久久综合一区77| 亚洲午夜无码久久久久小说 | 精品免费国产一区二区| 免费看一级毛片在线观看精品视频| 亚洲女同成av人片在线观看 | 在线视频免费观看高清| 午夜免费国产体验区免费的| 亚洲国产成人私人影院| 日韩a在线观看免费观看| 久久久久成人精品免费播放动漫| 亚洲AV成人影视在线观看| 亚洲日韩精品A∨片无码| 在线观看成人免费视频| 国产中文字幕在线免费观看 | 国产成人亚洲综合无| 亚洲视频在线一区| 免费国产小视频在线观看| 1000部拍拍拍18勿入免费视频软件| 精品特级一级毛片免费观看| 亚洲成aⅴ人片在线影院八| 国产亚洲AV手机在线观看| 天天看片天天爽_免费播放| 特级精品毛片免费观看| 特级av毛片免费观看| 亚洲综合精品第一页| 亚洲好看的理论片电影| 亚洲熟妇无码八AV在线播放| 日本媚薬痉挛在线观看免费| 97在线视频免费| 两个人看www免费视频| 黄色网址大全免费| 亚洲欧美熟妇综合久久久久| 亚洲高清中文字幕综合网| 亚洲综合网站色欲色欲| 免费日本黄色网址| 国产成人免费一区二区三区| 免费影院未满十八勿进网站| 97公开免费视频| 久久午夜无码免费| 国产亚洲免费的视频看|