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

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

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


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

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

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

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

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

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

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

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

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

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

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

    <?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。在實際應(yīng)用中,它們分別對應(yīng)著兩個不同的WireContext:ProcessEngineContext和TransactionConext。ProcessEngineContext覆蓋了jbpm4里最重要的服務(wù)類,這些類是全局唯一的,當(dāng)然,ProcessEngineContext也是獨(dú)此一份。本是同根生,命運(yùn)各不同。TransactionConext則是在每次openEnvironment時重新創(chuàng)建,因為其包含了數(shù)據(jù)庫連接和事務(wù)。

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

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




    http://www.tkk7.com/ronghao 榮浩原創(chuàng),轉(zhuǎn)載請注明出處:)
    posted on 2009-05-07 18:43 ronghao 閱讀(3695) 評論(2)  編輯  收藏 所屬分類: JbpmSide

    FeedBack:
    # re: Jbpm4的IOC容器[未登錄]
    2009-07-14 14:03 | 木瓜
    嗯,認(rèn)真的讀完了,學(xué)到不少!
    再次謝過BZ  回復(fù)  更多評論
      
    # re: Jbpm4的IOC容器[未登錄]
    2012-06-01 16:17 | jeff
    binding類中只要聲明變量就可以動態(tài)加載了binding類了?
    默認(rèn)是延遲加載和初始化  回復(fù)  更多評論
      
    <2009年5月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    關(guān)注工作流和企業(yè)業(yè)務(wù)流程改進(jìn)。現(xiàn)就職于ThoughtWorks。新浪微博:http://weibo.com/ronghao100

    常用鏈接

    留言簿(38)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    常去的網(wǎng)站

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 又粗又硬又大又爽免费视频播放| 一级毛片免费在线| 久久综合九色综合97免费下载 | 蜜芽亚洲av无码一区二区三区| 91av在线免费视频| 亚洲AV日韩精品久久久久久| a级毛片毛片免费观看久潮| 亚洲色欲久久久综合网| 本道天堂成在人线av无码免费| 精品国产日韩亚洲一区| 乱人伦中文视频在线观看免费| 免费人成视网站在线观看不卡| 国产亚洲综合精品一区二区三区| 国产精品冒白浆免费视频| 美女被免费网站在线视频免费 | 一级毛片高清免费播放| 国产成人高清亚洲| 99精品视频在线观看免费| 亚洲AV永久无码精品一百度影院| 久久久久久免费一区二区三区| 亚洲综合小说久久另类区| 麻豆最新国产剧情AV原创免费 | 亚洲高清国产拍精品青青草原 | 99久久综合精品免费| 亚洲精品中文字幕无码AV| 免费观看成人毛片a片2008| 99亚洲乱人伦aⅴ精品| 国产亚洲精品免费视频播放 | 亚洲精品成人网站在线播放 | 一级毛片**不卡免费播| 亚洲第一二三四区| 日本免费v片一二三区| 一级**爱片免费视频| 亚洲一区精品中文字幕| 成人毛片手机版免费看| 美女的胸又黄又www网站免费| 亚洲自偷自偷图片| 色婷婷7777免费视频在线观看| 精品女同一区二区三区免费播放 | 一级毛片全部免费播放| 亚洲欧美日韩中文二区|