關 注 開 源 (王鋒的Blog)

          Spring Hibernate Jboss Tomcat SCA OSGI

          Tuscany SCA啟動過程分析

          Tuscany作為SCA Spec1.0實現,現在已接近Release 1.0的尾聲,在近期將發布。其結構相對7月份發布的0.91版本進行了較大的調整,優化了代碼的結構并且增加了部分新功能。本文將針對其最新代碼,通過對其啟動過程進行分析,來了解Tuscany中對資源的加載及模型組裝的處理。

          一、啟動前準備

          1、 擴展點注冊器實例化

          Tuscany的實現采用了擴展點機制,所有的可重用對象都會在其中注冊,因此把擴展點注冊器作為參數來回傳遞,通過它可以從中拿到所有的已注冊對象。

          2、 注冊對象到擴展點注冊器

          Tuscany的現有版本與以前版本進行了較大改進,由原來在代碼中指定改為了由配置文件中指定,加載的方式也改為了Lazy Loading,在從注冊器中取得對象時加載配置文件,然后把實例放入注冊器的集合中,以便下次直接從中取得需要的對象,不再解析配置文件。

          最先注冊的對象有:WorkScheduler,ModelFactoryExtensionPoint,ContextFactoryExtensionPoint,ProxyFactory,InterfaceContractMapper。

          3、 加載ModuleActivator

          遍歷所有定義的ModuleActivator文件,解析其中的內容作為ModuleActivator接口的實現,然后執行其中的start方法。

          ModuleActivator現有接口已經去掉了擴展點注冊的方法。

          4、 解析策略配置文件definitions.xml

          策略配置文件配置了針對binding,implementation所使用的策略,其使用方式可參考其SCA spec中的 Policy Framework一節。

          二、資源加載

          Tuscany對資源的劃分是以Contribution為單位的,Contribution作為一組資源的集合,包含了SCA的配置文件如*.composite,*.componentType,sca-contribution.xml,以及用到的一些附加文件如*.wsdl等。

          現在說明一下Tuscany對單個Contribution的資源加載處理。

          1、 資源查找

          在Tuscany中定義了兩種Processor,Dir Processor和Jar Processor,分別對目錄及Jar中資源進行遍歷,返回其中包含的資源列表。

          2、 資源解析

          針對Contribution中的每一個資源都會生成DeployedArtifact對象,在其屬性Model中保存著資源的元模型數據。

          每個資源解析成元模型主要是依據針對每一資源有一對應的Processor,在其中包含有Read方法負責解析提供URL對應的資源。已提供的解析器有針對*.composite,*.componentType,*.wsdl,*.xsd類型文件的解析。同時針對文件中的不同結點也定義了相應的解析器,如對composite,reference,property,service等結點的解析。Tuscany中采用流XStream方式解析。

          3、 可發布資源解析

          每一個Contribution中都可以定義對外發布的資源列表,通過META-INF/sca-contribution.xml進行定義。同時,在其中也可以定義對外引用和對外暴露的服務。其Schema格式如下:

          示例:

          Contribution的結構圖如下:

          三、資源組裝

          針對每個Contribution中的可發布資源,如果類型為composite,則進行各個composite,component之間的關聯(Wire)。

          組裝的過程分為三個步驟:build, activate, start。

          1、 build過程

          build主要完成Composite之間的關聯,包括compoiste文件中Include元素的解析,Component實現為Compoiste的處理,以及Service,binding,Reference的處理等等。

          2、 activate過程

          主要完成component的ImplementationProvider的賦值,同時針對component中Service的binding進行設置BindingProvider,并針對每一Service,設置其RuntimeWire。

          3、 start過程

          主要完成Component對應的ServiceBindingProvider,ImplementationProvider,ScopeContainer完成啟動,通過執行方法start完成。

          形成RuntimeWire過程圖如下:

          posted on 2007-08-22 15:51 wangfeng 閱讀(1542) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 霍城县| 枣强县| 盐津县| 洮南市| 长武县| 华亭县| 临汾市| 南召县| 武隆县| 拉孜县| 航空| 比如县| 巴楚县| 大化| 泾源县| 拉孜县| 开封县| 济阳县| 乾安县| 崇文区| 浪卡子县| 襄樊市| 长泰县| 无极县| 竹山县| 阿拉善左旗| 安陆市| 宜兰县| 北碚区| 临西县| 潜山县| 贺兰县| 忻城县| 肇源县| 攀枝花市| 安义县| 临武县| 荔波县| 呼图壁县| 漠河县| 稷山县|