<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 評(píng)論 :: 0 Trackbacks
    和Jbpm3一樣,Jbpm4實(shí)現(xiàn)了自己的IOC容器。以現(xiàn)在的眼光看來,應(yīng)用程序里一個(gè)IOC容器幾乎是居家必備的,否則,又要平白多出一坨一坨的工廠類和單態(tài)類來。

    一、??? Jbpm4 IOC容器介紹
    IOC容器的目的是管理組件和實(shí)現(xiàn)組件之間的解耦。和Spring里的BeanFactory對(duì)應(yīng),Jbpm4里的接口是Context,具體實(shí)現(xiàn)則是 WireContext。Context實(shí)際在Jbpm4里有更多的含義,它與Environment一起,共同構(gòu)成了代碼運(yùn)行的運(yùn)行期環(huán)境。在這個(gè)環(huán)境 里可以獲取系統(tǒng)的組件,更為重要的是提供了數(shù)據(jù)庫連接(session)和事務(wù)(這個(gè)稍后會(huì)講)。

    先來看看Context接口的核心方法:
    ??????Object?get(String?key);
    ??
    <T>?T?get(Class<T>?type);


    很明顯,提供兩種從容器里獲取組件的方法,一種是通過name,一種是通過type。

    對(duì)于IOC容器來說,一般情況下都會(huì)提供一種加載的方式,比如從xml文件進(jìn)行加載、從資源文件進(jìn)行加載。Jbpm4透過WireParser具備從xml加載的能力。

    此外,WireContext通過一個(gè)Map緩存初始化后的組件。

    二、??? Jbpm4 IOC容器實(shí)現(xiàn)
    容器的實(shí)現(xiàn)有五個(gè)關(guān)鍵類和接口,分別是:WireParser、Binding、Descriptor、WireDefinition和WireContext。
    ?

    WireParser讀取xml文件,同時(shí)WireParser會(huì)加載一系列的Binding(默認(rèn)從jbpm.wire.bindins.xml文件讀取加載)。

    Binding負(fù)責(zé)根據(jù)xml里元素的tag將xml元素轉(zhuǎn)換為對(duì)應(yīng)的Descriptor。

    Descriptor負(fù)責(zé)初始化對(duì)象。它們被添加到WireDefinition。

    WireDefinition被WireParser返回給WireContext。WireContext創(chuàng)建對(duì)象時(shí)會(huì)訪問WireDefinition里的Descriptor,同時(shí)將初始化對(duì)象的任務(wù)委托給Descriptor自身。

    需要注意的是:Jbpm4在初始化對(duì)象時(shí)有著四種策略,分別是:延遲創(chuàng)建和初始化、延遲創(chuàng)建和立刻初始化、立刻創(chuàng)建和延遲初始化、立刻創(chuàng)建和立刻初始化。

    立刻創(chuàng)建:在WireContext創(chuàng)建完畢后對(duì)象就已經(jīng)創(chuàng)建。
    延遲創(chuàng)建:調(diào)用WireContext的get方法獲取該對(duì)象時(shí)才創(chuàng)建該對(duì)象。
    初始化:一般完成對(duì)象屬性的注入等操作。

    三、??? Jbpm4 IOC容器在Jbpm4里的應(yīng)用
    IOC容器在Jbpm4里最重要的作用就是加載Jbpm的總的配置文件(默認(rèn)是jbpm.cfg.xml),這也是整個(gè)Jbpm應(yīng)用的起點(diǎn)。大概掃一下這個(gè)配置文件:

    <?xml?version="1.0"?encoding="UTF-8"?>

    <jbpm-configuration?xmlns="http://jbpm.org/xsd/cfg">

    ??
    <process-engine-context>
    ?
    ????
    <repository-service?/>
    ????
    <repository-cache?/>
    ????
    <execution-service?/>
    ????
    <history-service?/>
    ????
    <management-service?/>
    ????
    <identity-service?/>
    ????
    <task-service?/>

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

    ????
    <hibernate-session-factory?/>
    ?
    ??
    </process-engine-context>

    ??
    <transaction-context>
    ????
    <repository-session?/>
    ????
    <pvm-db-session?/>
    ????
    <job-db-session?/>
    ????
    <task-db-session?/>
    ????
    <message-session?/>
    ????
    <timer-session?/>
    ????
    <history-session?/>
    ??
    </transaction-context>

    </jbpm-configuration>


    可以看到配置文件被分為了兩部分,分別是:process-engine-context和transaction-context。在實(shí)際應(yīng)用中,它們 分別對(duì)應(yīng)著兩個(gè)不同的WireContext:ProcessEngineContext和TransactionConext。 ProcessEngineContext覆蓋了jbpm4里最重要的服務(wù)類,這些類是全局唯一的,當(dāng)然,ProcessEngineContext也是 獨(dú)此一份。本是同根生,命運(yùn)各不同。TransactionConext則是在每次openEnvironment時(shí)重新創(chuàng)建,因?yàn)槠浒藬?shù)據(jù)庫連接和 事務(wù)。

    貫穿于整個(gè)Jbpm4中,這兩個(gè)Context被壓到Environment里(Environment和線程綁定),在任何需要的地方都能提供一條龍的服務(wù)。于是,在很多領(lǐng)域類里,利用這些服務(wù)實(shí)現(xiàn)充血模型就是很順理成章的一件事了。

    總結(jié): ProcessEngineContext給引擎領(lǐng)域模型提供全局的組件查找;TransactionConext提供數(shù)據(jù)庫相關(guān)服務(wù)。

    posted on 2009-07-13 10:34 禮物 閱讀(274) 評(píng)論(0)  編輯  收藏 所屬分類: JBPM4
    主站蜘蛛池模板: 亚洲国产日韩精品| 青柠影视在线观看免费高清| 亚洲宅男精品一区在线观看| 全黄a免费一级毛片人人爱| 99久在线国内在线播放免费观看| 青柠影视在线观看免费高清| 男人天堂免费视频| 无码免费又爽又高潮喷水的视频| 国产区图片区小说区亚洲区| 亚洲精品午夜视频| 亚洲国产成人精品久久| 亚洲伊人久久大香线蕉结合| 亚洲人成77777在线播放网站不卡| 亚洲国产精品成人综合久久久| 亚洲精品福利你懂| 亚洲丁香婷婷综合久久| 国产精品亚洲专区在线播放| 二级毛片免费观看全程| A毛片毛片看免费| 无码日韩精品一区二区免费暖暖 | 亚洲欧洲中文日韩av乱码| 亚洲成a人片在线观看日本麻豆| 亚洲区日韩区无码区| 亚洲国产精品无码久久一线| 亚洲视频免费播放| 一本天堂ⅴ无码亚洲道久久| 国产亚洲高清在线精品不卡| 一级中文字幕乱码免费| 欧洲人免费视频网站在线| 台湾一级毛片永久免费| 日本免费中文字幕在线看| 成年女人毛片免费视频| 免费看成人AA片无码视频羞羞网| 成人免费看片又大又黄| 亚洲免费日韩无码系列 | 在线观看免费污视频| 免费下载成人电影| 在线观看永久免费视频网站| 成人亚洲性情网站WWW在线观看| 337p欧洲亚洲大胆艺术| 亚洲国产精品成人综合色在线|