gembin

          OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

          HBase, Hadoop, ZooKeeper, Cassandra

          Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

          There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

          About Me

           

          Apache Tuscany SCA Java 架構(gòu)指南

          • 概況
            • 內(nèi)核
            • 擴展
            • 運行時
          • 內(nèi)部高層視圖
          • Bootstrap
          • 裝配模型
          • 分發(fā)包
          • 綁定擴展
          • 構(gòu)件實現(xiàn)擴展
          • 數(shù)據(jù)綁定擴展
          • 復(fù)合激活
          • 加載SCA組件
          • 與Spring集成
            • Spring作為構(gòu)件實現(xiàn)
            • Spring作為IOC容器

          概況

          SCA JAVA 運行時是由內(nèi)核和擴展兩部分組成。內(nèi)核本質(zhì)上是一個連接多個VM的引擎,使用依賴注入(Dependency Injection)和控制反轉(zhuǎn)( Inversion of Control)將構(gòu)件連接在一起。

          內(nèi)核

          其核心是設(shè)計簡單和功能有限的。它將不同的功能單元連接到一起,并且提供SPIs以讓擴展之間可以互動,例如服務(wù)發(fā)現(xiàn),可靠性,支持透明協(xié)議,等等。這些功能都以擴展的方式提供。

          擴展

          擴展提高了SCA運行時的功能型。擴展類型并不固定,Tuscany的核心通過提供一個可調(diào)整的模型的設(shè)計使其盡可能的靈活。現(xiàn)在,已知的擴展類型有:

          • 組件實現(xiàn)類型:例如,spring、Groovy、Javascript
          • 綁定類型:例如:Axis、CXF、AMQP、ActiveMQ、JXTA
          • 數(shù)據(jù)綁定類型:例如,JAXB、SDO、XmlBeans
          • 接口綁定類型:例如,WSDL、Java

          具體細(xì)節(jié)可參考擴展開發(fā)向?qū)?/a>

          JAVA SCA 運行時高層次概覽

          下圖是Java SCA運行時的一個高層次概覽,其中包括以下關(guān)鍵模塊:

          1. SCA規(guī)格API:SCA JAVA客戶端的API和執(zhí)行規(guī)格
          2. API:實現(xiàn)SCA規(guī)格API的Tuscany API
          3. 接口綁定:支持服務(wù)定義的類型,例如WSDL、Java……
          4. 數(shù)據(jù)綁定:實現(xiàn)數(shù)據(jù)支持,例如SDO、JAXB……
          5. 主機平臺:提供Tuscany運行時的環(huán)境

          bootsrap

          Bootstrap 進(jìn)程受主機環(huán)境控制。默認(rèn)進(jìn)程是由DefaultBootstrapper實現(xiàn)的。運行時進(jìn)程服務(wù)使用SCA XML形式進(jìn)行集成,也可以采用其他形式:

          • 加載階段處理SCDL,并在內(nèi)存中創(chuàng)建一個對應(yīng)的運行時對象(例如:組件、服務(wù)、引用)
          • 連接線將引用連接到服務(wù)

           

          集成模型

          SCA的裝配模型在Tuscany中是通過一系列接口實現(xiàn)的。以下是一些關(guān)鍵件:

          • SCA組件是由SCA實現(xiàn)的實例配置而成,它提供和銷毀服務(wù)
          • SCA服務(wù)用以聲明外部可訪問的服務(wù)實現(xiàn)
          • SCA引用表示一個對其他服務(wù)實現(xiàn)的引用,這里被使用的服務(wù)通過配置指定
          • 一種實現(xiàn)表示一種軟件技術(shù),例如Java類、BPEL流程、XSLT轉(zhuǎn)換、或者C++類,用以在SOA應(yīng)用中實現(xiàn)一個或多個服務(wù)。一個SCA集成也是一個實現(xiàn)。
          • 組件類型指的是可配置的實現(xiàn)方式
          • 接口定義了一個或多個業(yè)務(wù)功能,這些業(yè)務(wù)功能的實現(xiàn)由服務(wù)提供,通過引用為組件所使用,服務(wù)是由實現(xiàn)的接口所定義的,SCA目前支持兩種類型的接口:
            •   Java接口
            • WSDL portTypes
          • 一個SCA Composite十一個SCA域中的基本單元,它由組件、服務(wù)、引用、它們之間的連線組成。
          • SCA聯(lián)結(jié)了服務(wù)引用和服務(wù)
          • 服務(wù)和引用之間使用綁定聯(lián)結(jié)。引用使用綁定描述服務(wù)之間相互訪問的機制,服務(wù)使用綁定描述客戶端訪問服務(wù)的機制
          • 屬性允許在外部實現(xiàn)的配置進(jìn)行設(shè)值,數(shù)據(jù)通過組件也可能源自于一個組合件的屬性提供。

          發(fā)布

          Tuscany運行時提供了一個框架,以支持SCA發(fā)布。該框架可針對以下擴展點進(jìn)行擴展:

          PackageProcessorExtensionPoint:負(fù)責(zé)處理不同的包或者檔案格式,例如:文件夾、JAR包、osgi包、EAR、WAR以及ZIP。

          ArtifactProcessorExtensionPoint:負(fù)責(zé)處理具體類型的服務(wù),例如:WSDL、XSD、構(gòu)件、JAVA類、BPEL。

          • 包處理器在安裝時掃描發(fā)布包,并且創(chuàng)建一個待處理列表,目前支持文件夾/文件系統(tǒng)和jar發(fā)布包,為了對發(fā)布包可用,包處理器程序需要通過包處理器擴展點進(jìn)行自我注冊。
          • 組件處理器被用來處理發(fā)布包中的組件,為了保持對發(fā)布服務(wù)可用,組件處理器需要使用組件處理擴展進(jìn)行自我注冊,組件處理器會在以下兩個步驟進(jìn)行調(diào)用:
            • 讀 取:  在這里你可以讀取一個組件(一個文檔、XML、類等等),實例化一個代表組件的模型并銷毀它。SCA發(fā)布服務(wù)對注冊了ArtifactProcessor 的組件調(diào)用ArtifactProcessor.read() 方法,如果你的模型對另外一個模型有引用,不要試圖也立即實例化另一個模型,你應(yīng)該只保留 引用信息,在處理階段這將變成一個指針,注意現(xiàn)在你沒必要完全讀取并實例化你的模型,可以延遲實例化。
            • 處理:本階段給你機會使你可以處理對其他模型的引用(WSDL,類,其他復(fù)合組件,或者一個組件類型(componentType))。這時,所有代表發(fā)布包里組件的模型被全部讀取出來,并且在發(fā)布的 ArtifactResolver進(jìn)行注冊,準(zhǔn)備處理。
          • 所有可以部署的復(fù)合組件都應(yīng)該部署在SCA域

          實現(xiàn)擴展

          實現(xiàn)擴展負(fù)責(zé)支持實現(xiàn)方式的類型:比如Java、Script、BPEL等。

          綁定擴展

          綁定擴展負(fù)責(zé)支持綁定方式的類型:Web服務(wù)、JMS、JSON-RPC以及RMI。

          接口擴展

          接口擴展負(fù)責(zé)支持接口的類型,例如Java接口和WSDL1.1 portType。

          數(shù)據(jù)綁定擴展

          請參考Tuscany Databinding Guide

          復(fù)合組件激活

          在一個復(fù)合組件在配置好以后,它可以在SCA域進(jìn)行激活,Tuscany運行時通過以下步驟去激活它:

          1、構(gòu)建:在此階段,復(fù)合組件被進(jìn)一步常態(tài)化,以更容易和運行時互動,元數(shù)據(jù)在服務(wù)/引用升級以后進(jìn)行合并。基于扁平的模型,我們可以在構(gòu)建級獲取全部的信息。

          2、配置:在此階段,復(fù)合組件的層次被引導(dǎo)到配置一個組件的實現(xiàn),在組件間以及組件和外部服務(wù)之間,引用綁定和服務(wù)綁定會在以后的步驟中用來創(chuàng)建運行時連接。

          3、創(chuàng)建運行時連接: 在此階段,通過選定的綁定方式,創(chuàng)建了組件引用和組件服務(wù)的運行時連接。運行時連接是調(diào)用鏈的集合。每個執(zhí)行鏈包含一組執(zhí)行器和攔截器。執(zhí)行器為綁定協(xié)議 和實現(xiàn)技術(shù)提供調(diào)用的邏輯,攔截器是一種特殊的執(zhí)行器,它為方法執(zhí)行提供了附加的邏輯,例如數(shù)據(jù)轉(zhuǎn)換以及交易控制。對于一個組件引用來說,我們創(chuàng)建運行時 連接來表示通過綁定的對外執(zhí)行;對于組件服務(wù)呢,我們創(chuàng)建運行時連接表示對實現(xiàn)類型的向內(nèi)連接。回調(diào)連接可以被附加到組件服務(wù)之上,表示來自服務(wù)的回調(diào)執(zhí) 行。

          4、啟動服務(wù)組件:在這個階段,ImplementationProvider, ReferenceBindingProvider和ServiceBindingProvider 定義的start() 回調(diào)方法將被調(diào)用,最后,組件、組件引用以及組件服務(wù)被初始化去服務(wù)組件間的互動。服務(wù)監(jiān)聽器被啟動已接受從綁定層來的連接請求。

          調(diào)用概況

          1、調(diào)用被分派到WireInvocationHandler

          2、WireInvocationHandler 尋找正確的InvocationChain

          3、創(chuàng)建一條消息,設(shè)值payload,設(shè)值TargetInvoker,然后將消息通過鏈向下傳遞

          4、當(dāng)消息到達(dá)鏈的底部后,TargetInvoker 會被調(diào)用,它按順序?qū)δ繕?biāo)進(jìn)行調(diào)度

          5、當(dāng)將TargetInvoker 存儲后,當(dāng)連接源的可視范圍等于或小于目標(biāo)時(例如:request-》composite),外向端允許將目標(biāo)實例進(jìn)行緩存。

          運行時提供具有InboundWires 和OutboundWires的構(gòu)件。InvocationChains 被構(gòu)件連接所持有,因此它是無狀態(tài)的,允許引入新的攔截器以及重新連接等動態(tài)事件的發(fā)生。

          加載SCA部件

          組件處理器

          組件處理器被用來處理發(fā)布包中的組件,為了保持對發(fā)布服務(wù)可用,組件處理器需要使用組件處理擴展進(jìn)行自我注冊,組件處理器會在以下兩個步驟進(jìn)行調(diào)用:

          • 讀取:  在這里你可以讀取一個組件(一個文檔、XML、類等等),實例化一個代表組件的模型并銷毀它。SCA發(fā)布服務(wù)對注冊了ArtifactProcessor 的組件調(diào)用ArtifactProcessor.read() 方法,如果你的模型對另外一個模型有引用,不要試圖也立即實例化另一個模型,你應(yīng)該只保留 引用信息,在處理階段這將變成一個指針,注意現(xiàn)在你沒必要完全讀取并實例化你的模型,可以延遲實例化。
          • 處理:本階段給你機會使你可以處理對其他模型的引用(WSDL,類,其他復(fù)合組件,或者一個組件類型(componentType))。這時,所有代表發(fā)布包里組件的模型被全部讀取出來,并且在發(fā)布的 ArtifactResolver進(jìn)行注冊,準(zhǔn)備處理。

          加載JAVA SCA

          SCA服務(wù)部件在SCA里以SCDL文件的形式進(jìn)行部署,Tuscany運行時組件處理器加載這些SCDL到模型對象,這些對象包含了元數(shù)據(jù)。

          有兩種主要的加載器:

          1、StAXElementLoader:從StAX 事件加載XML

          2、ComponentTypeLoader:為一個實現(xiàn)加載組件類別或者處理一個文件

          加載組件類別

          為實現(xiàn)規(guī)范加載組件類型定義

          1、如何實現(xiàn)是實現(xiàn)規(guī)范

          運行時組件的類圖

          posted on 2008-04-27 22:58 gembin 閱讀(1128) 評論(0)  編輯  收藏 所屬分類: SCASOA

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(6)

          隨筆分類(440)

          隨筆檔案(378)

          文章檔案(6)

          新聞檔案(1)

          相冊

          收藏夾(9)

          Adobe

          Android

          AS3

          Blog-Links

          Build

          Design Pattern

          Eclipse

          Favorite Links

          Flickr

          Game Dev

          HBase

          Identity Management

          IT resources

          JEE

          Language

          OpenID

          OSGi

          SOA

          Version Control

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          free counters
          主站蜘蛛池模板: 江津市| 扶余县| 奈曼旗| 临猗县| 大丰市| 泽州县| 嵩明县| 吴堡县| 广灵县| 黑龙江省| 盐亭县| 长葛市| 伽师县| 密云县| 西乌珠穆沁旗| 崇州市| 新邵县| 新绛县| 万宁市| 运城市| 鹤山市| 香港| 郁南县| 济宁市| 铜川市| 淮南市| 揭东县| 永年县| 闽清县| 祁连县| 延庆县| 新余市| 邵阳县| 永川市| 锦屏县| 吉木萨尔县| 城市| 时尚| 玛纳斯县| 安塞县| 栾川县|