天天看點

Apache Tuscany SCA Java 架構指南

概況

SCA JAVA 運作時是由核心和擴充兩部分組成。核心本質上是一個連接配接多個VM的引擎,使用依賴注入(Dependency Injection

Apache Tuscany SCA Java 架構指南

)和控制反轉( Inversion of Control

Apache Tuscany SCA Java 架構指南

)将構件連接配接在一起。

核心

其核心是設計簡單和功能有限的。它将不同的功能單元連接配接到一起,并且提供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運作時的環境
Apache Tuscany SCA Java 架構指南

bootsrap

Bootstrap 程序受主機環境控制。預設程序是由DefaultBootstrapper實作的。運作時程序服務使用SCA XML形式進行內建,也可以采用其他形式:

  • 加載階段處理SCDL,并在記憶體中建立一個對應的運作時對象(例如:元件、服務、引用)
  • 連接配接線将引用連接配接到服務
Apache Tuscany SCA Java 架構指南

內建模型

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

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

釋出

Tuscany運作時提供了一個架構,以支援SCA釋出。該架構可針對以下擴充點進行擴充:

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

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

Apache Tuscany SCA Java 架構指南
  • 包處理器在安裝時掃描釋出包,并且建立一個待處理清單,目前支援檔案夾/檔案系統和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() 回調方法将被調用,最後,元件、元件引用以及元件服務被初始化去服務元件間的互動。服務監聽器被啟動已接受從綁定層來的連接配接請求。

Apache Tuscany SCA Java 架構指南
Apache Tuscany SCA Java 架構指南

調用概況

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、如何實作是實作規範

運作時元件的類圖

Apache Tuscany SCA Java 架構指南

 ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

英文原文版權歸原作者所有, 本譯文轉載請注明出處!

譯者:abigfrog 聯系:QQ:800736, MSN:[email protected]

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※