<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自己的IOC容器[轉載]

    和Jbpm3一樣,Jbpm4實現了自己的IOC容器。以現在的眼光看來,應用程序里一個IOC容器幾乎是居家必備的,否則,又要平白多出一坨一坨的工廠類和單態類來。

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

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


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

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

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

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

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

    Binding負責根據xml里元素的tag將xml元素轉換為對應的Descriptor。

    Descriptor負責初始化對象。它們被添加到WireDefinition。

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

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

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

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

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

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

    總結: ProcessEngineContext給引擎領域模型提供全局的組件查找;TransactionConext提供數據庫相關服務。




    來自: http://m.tkk7.com/ronghao 榮浩原創

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

    主站蜘蛛池模板: 亚洲入口无毒网址你懂的| 666精品国产精品亚洲 | 最近中文字幕国语免费完整| 亚洲国产电影av在线网址| 亚洲av永久中文无码精品综合 | fc2免费人成在线| 亚洲熟妇无码乱子AV电影| 大妹子影视剧在线观看全集免费| 亚洲熟伦熟女新五十路熟妇| 一本到卡二卡三卡免费高| 国产亚洲成归v人片在线观看| 两个人看的www免费| 国产亚洲精AA在线观看SEE| 色猫咪免费人成网站在线观看| 亚洲欧洲日韩国产综合在线二区| 最近免费中文字幕mv电影| 亚洲免费在线视频播放| 日韩成全视频观看免费观看高清 | 亚洲性无码一区二区三区| 好吊妞视频免费视频| 亚洲av日韩综合一区久热| 亚洲国产高清精品线久久| 国产日韩AV免费无码一区二区| 亚洲精品视频在线| 免费无码AV电影在线观看| 香蕉视频在线观看免费| 亚洲一区二区女搞男| 免费v片在线观看视频网站| 亚洲偷偷自拍高清| 亚洲精品无码久久毛片| 免费无码VA一区二区三区| 国产精品亚洲一区二区麻豆| 午夜亚洲福利在线老司机| 男人进去女人爽免费视频国产| 亚洲三级在线播放| 久久亚洲av无码精品浪潮| 67pao强力打造高清免费| 美女羞羞免费视频网站| 亚洲卡一卡2卡三卡4卡无卡三 | 亚洲伊人久久成综合人影院| 精品无码无人网站免费视频|