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

          概況

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

          內(nèi)核

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

          擴(kuò)展

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

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

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

          JAVA SCA 運(yùn)行時(shí)高層次概覽

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

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

          bootsrap

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

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

           

          集成模型

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

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

          發(fā)布

          Tuscany運(yùn)行時(shí)提供了一個(gè)框架,以支持SCA發(fā)布。該框架可針對以下擴(kuò)展點(diǎn)進(jìn)行擴(kuò)展:

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

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

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

          實(shí)現(xiàn)擴(kuò)展

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

          綁定擴(kuò)展

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

          接口擴(kuò)展

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

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

          請參考Tuscany Databinding Guide。

          復(fù)合組件激活

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

          1、構(gòu)建:在此階段,復(fù)合組件被進(jìn)一步常態(tài)化,以更容易和運(yùn)行時(shí)互動(dòng),元數(shù)據(jù)在服務(wù)/引用升級以后進(jìn)行合并?;诒馄降哪P?,我們可以在構(gòu)建級獲取全部的信息。

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

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

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

          調(diào)用概況

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

          2、WireInvocationHandler 尋找正確的InvocationChain

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

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

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

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

          加載SCA部件

          組件處理器

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

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

          加載JAVA SCA

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

          有兩種主要的加載器:

          1、StAXElementLoader:從StAX 事件加載XML

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

          加載組件類別

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

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

          運(yùn)行時(shí)組件的類圖

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

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(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
          主站蜘蛛池模板: 宝坻区| 克山县| 克拉玛依市| 西平县| 桃江县| 华池县| 巴林右旗| 建阳市| 普洱| 香港| 奉新县| 商城县| 姜堰市| 公安县| 达州市| 通城县| 绵阳市| 曲阳县| 长阳| 新津县| 三亚市| 霍邱县| 工布江达县| 天气| 潜江市| 汉源县| 屏东县| 淳安县| 若羌县| 古交市| 厦门市| 三都| 如东县| 东山县| 海林市| 桓台县| 淮南市| 夏津县| 松江区| 颍上县| 吉木乃县|