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 架構指南

          • 概況
            • 內核
            • 擴展
            • 運行時
          • 內部高層視圖
          • Bootstrap
          • 裝配模型
          • 分發包
          • 綁定擴展
          • 構件實現擴展
          • 數據綁定擴展
          • 復合激活
          • 加載SCA組件
          • 與Spring集成
            • Spring作為構件實現
            • Spring作為IOC容器

          概況

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

          內核

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

          擴展

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

          • 組件實現類型:例如,spring、Groovy、Javascript
          • 綁定類型:例如:Axis、CXF、AMQP、ActiveMQ、JXTA
          • 數據綁定類型:例如,JAXB、SDO、XmlBeans
          • 接口綁定類型:例如,WSDL、Java

          具體細節可參考擴展開發向導

          JAVA SCA 運行時高層次概覽

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

          1. SCA規格API:SCA JAVA客戶端的API和執行規格
          2. API:實現SCA規格API的Tuscany API
          3. 接口綁定:支持服務定義的類型,例如WSDL、Java……
          4. 數據綁定:實現數據支持,例如SDO、JAXB……
          5. 主機平臺:提供Tuscany運行時的環境

          bootsrap

          Bootstrap 進程受主機環境控制。默認進程是由DefaultBootstrapper實現的。運行時進程服務使用SCA XML形式進行集成,也可以采用其他形式:

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

           

          集成模型

          SCA的裝配模型在Tuscany中是通過一系列接口實現的。以下是一些關鍵件:

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

          發布

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

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

          ArtifactProcessorExtensionPoint:負責處理具體類型的服務,例如:WSDL、XSD、構件、JAVA類、BPEL。

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

          實現擴展

          實現擴展負責支持實現方式的類型:比如Java、Script、BPEL等。

          綁定擴展

          綁定擴展負責支持綁定方式的類型:Web服務、JMS、JSON-RPC以及RMI。

          接口擴展

          接口擴展負責支持接口的類型,例如Java接口和WSDL1.1 portType。

          數據綁定擴展

          請參考Tuscany Databinding Guide

          復合組件激活

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

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

          2、配置:在此階段,復合組件的層次被引導到配置一個組件的實現,在組件間以及組件和外部服務之間,引用綁定和服務綁定會在以后的步驟中用來創建運行時連接。

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

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

          調用概況

          1、調用被分派到WireInvocationHandler

          2、WireInvocationHandler 尋找正確的InvocationChain

          3、創建一條消息,設值payload,設值TargetInvoker,然后將消息通過鏈向下傳遞

          4、當消息到達鏈的底部后,TargetInvoker 會被調用,它按順序對目標進行調度

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

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

          加載SCA部件

          組件處理器

          組件處理器被用來處理發布包中的組件,為了保持對發布服務可用,組件處理器需要使用組件處理擴展進行自我注冊,組件處理器會在以下兩個步驟進行調用:

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

          加載JAVA SCA

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

          有兩種主要的加載器:

          1、StAXElementLoader:從StAX 事件加載XML

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

          加載組件類別

          為實現規范加載組件類型定義

          1、如何實現是實現規范

          運行時組件的類圖

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

          導航

          統計

          常用鏈接

          留言簿(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
          主站蜘蛛池模板: 扶余县| 宁海县| 苍山县| 红安县| 龙州县| 侯马市| 莱阳市| 卓资县| 宝兴县| 德令哈市| 阜新| 临城县| 英山县| 灌云县| 望谟县| 唐山市| 额尔古纳市| 婺源县| 佛冈县| 全椒县| 大英县| 永顺县| 进贤县| 鸡西市| 呼图壁县| 千阳县| 化州市| 堆龙德庆县| 临夏县| 阳曲县| 札达县| 昆山市| 敦煌市| 卫辉市| 高雄县| 广宁县| 新化县| 年辖:市辖区| 龙门县| 五家渠市| 邓州市|