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)指南

          概述

            SCA Java運(yùn)行時由core和extension組成。Core本質(zhì)上來說是一個多VM的wiring引擎。該引擎使用IOC(控制反轉(zhuǎn))和DI(依賴注入)原則來連接組件。

            Core

            Core在性能方面是簡單而有限的。它將功能單元連接在一起,并提供可以和extension交互的SPI機(jī)制。例如象服務(wù)發(fā)現(xiàn),可靠性,對傳輸協(xié)議的支持等特性都是通過extension來做的。

            Extension

            Extension增強(qiáng)SCA運(yùn)行時的功能。Extesion類型不是固定的。而core則是通過提供對extension模塊開放支持來使得設(shè)計盡量靈活。

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

            關(guān)于如何實現(xiàn)一個extension的詳細(xì)信息可以在Extensions Guide中查看。

            運(yùn)行時

            Core是設(shè)計得可以嵌入于許多不同的主機(jī)環(huán)境下的。例如,core也許用于OSGI容器、單獨的運(yùn)行時環(huán)境、serlvet引擎或J2EE應(yīng)用服務(wù)器中。運(yùn)行時的性能根據(jù)主機(jī)環(huán)境不同而不同。

            Java SCA運(yùn)行時的高層概述:

            下圖是由關(guān)鍵的模塊/包組成的SCA運(yùn)行時高層視圖

            1、 SCA Spec API:由SCA Java Client and Implementation定義的API

            2、 API:擴(kuò)展了SCA Spec API的Tuscany API

            3、 Core:運(yùn)行時實現(xiàn)和SPI擴(kuò)展機(jī)制

            4、 Extension:

            1. Component(英文原版有錯誤) implementation – 擴(kuò)展語言支持:例如 BPEL,Python,C++,Ruby等

            2. Binding – 擴(kuò)展協(xié)議支持:例如 Axis2, CXF等

            3. Interface Binding – 擴(kuò)展服務(wù)定義類型:比如SWDL, Java等

            4. Databinding – 擴(kuò)展數(shù)據(jù)支持:比如SDO, JAXB等

            5、 Host platforms:Tuscany運(yùn)行時的主機(jī)環(huán)境

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

            <!--[if !vml]--><!--[endif]-->

            內(nèi)部高層視圖

            參考下圖:

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

            <!--[if !vml]--><!--[endif]-->

            引導(dǎo)過程

            引導(dǎo)過程是由主機(jī)環(huán)境控制的。默認(rèn)的實現(xiàn)是DefaultBootstrapper。運(yùn)行時由某個成型的SCA Assembly XML文件序列化而來并處理服務(wù)裝配。

          •   裝載階段處理SCDL并創(chuàng)建一個內(nèi)存模型處理相應(yīng)的運(yùn)行時工件(例如組件componet,服務(wù)service,引用reference)
          •   連接階段將對服務(wù)的引用連接起來

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

          裝配模型

            SCA裝配模型在Tuscany中是用一系列接口表示的。如下是些關(guān)鍵的元素。

          •   SCA component 是配置化的SCA實現(xiàn)的實例,它可以提供服務(wù)或消費(fèi)服務(wù)。
          •   SCA service用于聲明實現(xiàn)的可以被外部訪問的服務(wù)
          •   SCA reference用于表示該實現(xiàn)對某些其他實現(xiàn)所提供的服務(wù)的依賴。該依賴的服務(wù)可以通過配置來指定。

            Implementation是用于描述軟件技術(shù)的概念,例如在面向服務(wù)的應(yīng)用中實現(xiàn)了一個或多個服務(wù)的Java 類,BEPL,XSLT轉(zhuǎn)換,C++類。SCA composite也是implementaion。

            ComponentType涉及實現(xiàn)的可配置的方面。

            Interface定義了一個或多個業(yè)務(wù)功能。這些業(yè)務(wù)功能通過Service提供,通過Reference讓其他組件使用。服務(wù)是由實現(xiàn)的接口來定義的。現(xiàn)在SCA支持兩種接口類型系統(tǒng):Java接口、SWDL portType

            SCA composite是SCA域中的compositon的基礎(chǔ)單元。SCA Composite是組件的裝配,服務(wù)、應(yīng)用和wire都互相連接。

            SCA wire將服務(wù)引用連接到服務(wù)上。

            Binding是被服務(wù)和引用所使用的。引用使用綁定來描述訪問機(jī)制,該機(jī)制用于訪問連接的服務(wù)。服務(wù)使用綁定來描述客戶程序調(diào)用服務(wù)的訪問機(jī)制。

            Property是考慮到有的實現(xiàn)配置需要顯式地設(shè)置數(shù)據(jù)值。該數(shù)據(jù)值由組件提供,當(dāng)然也可能來源于容器composite的屬性。

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

            <!--[if !vml]--><!--[endif]-->

            Contribution

            Tuscany運(yùn)行時提供了一個框架來支持SCA的contribution。框架可以通過下列的兩個擴(kuò)展點來擴(kuò)展:

            PackageProcessorExtensionPoint:它用于處理不同的包裝格式或歸檔的擴(kuò)展,可以是目錄、Jar、OSGI bundle、EAR、War或Zip。

            ArtifactProcessorExtensionPoint:它用于處理特定工件類型的擴(kuò)展,可以是SWDL,XSD,composite,java類后BEPL。

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

            <!--[if !vml]--><!--[endif]-->

          <!--[if !supportLists]-->l <!--[endif]-->包處理器會掃描安裝了的contribution,并產(chǎn)生需要處理的工件列表。當(dāng)前有支持文件夾/文件系統(tǒng)和 Jar contribution包。為了讓contribution服務(wù)有效,包處理器要注冊自己給包處理extension 。

          <!--[if !supportLists]-->l <!--[endif]-->工件處理器用于處理contribution上的每個有效的工件。為了讓contribution服務(wù)有效,工 件處理器要注冊自己給工件處理extension 。對于每個工件,工件處理器分兩個階段被調(diào)用。

            <!--[if !supportLists]-->? <!--[endif]-->讀階段:這里是你讀取工件(可以是一個文檔、XML元素或類等等)的地方,組裝描述工件的模型并返回它。SCA contribution服務(wù)在所有注冊了工件處理器的工件上調(diào)用ArtifactProcessor.read()。假如你的模型引用了其他的模型, 不需要立刻裝載那些模型,你只需要保持描述引用的信息,在resolve階段,你將會把該信息轉(zhuǎn)換成指向被引用模型的指針。注意:你沒有必要在這個時刻完 全讀取并裝載模型,你可以在以后來完成這些工作。

            <!--[if !supportLists]-->? <!--[endif]-->解析階段:這個階段讓你有機(jī)會解析對其他模型的引用。這個時刻,SCA contribution中所有的描述工件的模型都已經(jīng)讀取,并注冊了工件解析器,準(zhǔn)備被解析。

            <!--[if !supportLists]-->l <!--[endif]-->所有可部署的composite應(yīng)該在現(xiàn)在準(zhǔn)備部署到SCA域中。

            包處理器會掃描安裝了的contribution,并產(chǎn)生需要處理的工件列表。當(dāng)前有支持文件夾/文件系統(tǒng)和Jar contribution包。為了讓contribution服務(wù)有效,包處理器要注冊自己給包處理extension 。

            工件處理器用于處理contribution上的每個有效的工件。為了讓contribution服務(wù)有效,工件處理器要注冊自己給工件處理extension 。對于每個工件,工件處理器分兩個階段被調(diào)用。

          ? 讀階段:這里是你讀取工件(可以是一個文檔、XML元素或類等等)的地方,組裝描述工件的模型并返回它。SCA contribution服務(wù)在所有注冊 了工件處理器的工件上調(diào)用ArtifactProcessor.read()。假如你的模型引用了其他的模型,不需要立刻裝載那些模型,你只需要保持描述 引用的信息,在resolve階段,你將會把該信息轉(zhuǎn)換成指向被引用模型的指針。注意:你沒有必要在這個時刻完全讀取并裝載模型,你可以在以后來完成這些 工作。

            ? 解析階段:這個階段讓你有機(jī)會解析對其他模型的引用。這個時刻,SCA contribution中所有的描述工件的模型都已經(jīng)讀取,并注冊了工件解析器,準(zhǔn)備被解析。

            所有可部署的composite應(yīng)該在現(xiàn)在準(zhǔn)備部署到SCA域中。

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

            實現(xiàn)擴(kuò)展負(fù)責(zé)實現(xiàn)類型的支持,例如Java,Script和BEPL

            綁定擴(kuò)展

            綁定擴(kuò)展負(fù)責(zé)對綁定類型進(jìn)行支持,例如web service,JMS,JSON-RPC和RMI

            接口擴(kuò)展

            接口擴(kuò)展負(fù)責(zé)接口類型的擴(kuò)展,例如Java接口和WSDL 1.1 portType

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

            請看我翻譯的Tuscany數(shù)據(jù)綁定指南

            Composite 激化

            在composite完整地配置后,就能在SCA域中激活它。Tuscany運(yùn)行時用以下步驟激化composite:

            1、 構(gòu)建composite:這個階段,composite模型更進(jìn)一步地正規(guī)化來方便運(yùn)行時的交互。元數(shù)據(jù)在service/reference提升后統(tǒng)一化了。根據(jù)這個扁平模型,我們可以獲取所有的組件級信息。

            2、 配置composite:這個階段,composite層次結(jié)構(gòu)用于導(dǎo)航組件實現(xiàn)的配置信息。引用綁定和服務(wù)通過提供者工廠來創(chuàng)建運(yùn)行時組件以及外部服務(wù)之間的連接。

          3、 創(chuàng)建運(yùn)行時連接(wire):這個階段,為組件引用和組件服務(wù)以選定的綁定形式創(chuàng)建運(yùn)行時連接。運(yùn)行時連接是一個調(diào)用鏈的集合。這些調(diào)用鏈按照操作來分成 區(qū)。每個調(diào)用鏈都由一系列的調(diào)用器和攔截器構(gòu)成。調(diào)用器提供到綁定協(xié)議和實現(xiàn)技術(shù)的邏輯調(diào)用。攔截器是特定類型的調(diào)用器,為調(diào)用它提供了附加的功能,比如 數(shù)據(jù)傳輸和事務(wù)控制。對于一個組件引用,我們創(chuàng)建運(yùn)行時連接(wire)來描述以選定綁定的形式對外的調(diào)用。對于組件服務(wù),我們創(chuàng)建運(yùn)行時連接 (wire)來描述對實現(xiàn)的對內(nèi)調(diào)用。回調(diào)連接(callback wire)能附加到組件服務(wù)上來描述來自服務(wù)的一個回調(diào)調(diào)用。

            4、 啟動composite:這個階段,由ImplementationProvider、ReferenceBindingProvider和 ServiceBindingProvider定義的start()回調(diào)方法會被調(diào)用。最終,組件,組件引用和組件服務(wù)被初始化而服務(wù)于組件的交互。服務(wù) 監(jiān)聽器會啟動,從而接受來自綁定層(binding layer)的入內(nèi)請求。

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

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

            <!--[if !vml]--><!--[endif]-->

            <!--[if !vml]--><!--[endif]-->

            調(diào)用概述

            調(diào)用會被分發(fā)到WireInvocationHandler

            WireInvocationHandler查找正確的InvocationChain

            然后創(chuàng)建一個消息,設(shè)置有效負(fù)載,設(shè)置TargetInvoker,并傳遞消息給下層鏈

            當(dāng)消息到達(dá)鏈的末端,TargetInvoker會被調(diào)用,現(xiàn)在輪到TargetInvoker負(fù)責(zé)叫調(diào)用分發(fā)到目標(biāo)

          存儲在outbound邊界上的TargetInvoker當(dāng)連接源的作用域值等于或小于目標(biāo)的作用域值時,允許緩存目標(biāo)實例。運(yùn)行時環(huán)境通過 Inboundwire和Outboundwire提供組件。調(diào)用鏈附著于組件連接(wire)中,因此是無狀態(tài)的。所以調(diào)用鏈可以具有動態(tài)行為,例如新 攔截器的介入和重新連接。

            裝載SCA裝配

            工件處理器用于處理contribution上的每個有效的工件。為了讓contribution服務(wù)有效,工件處理器要注冊自己給工件處理extension 。對于每個工件,工件處理器分兩個階段被調(diào)用。

          ? 讀階段:這里是你讀取工件(可以是一個文檔、XML元素或類等等)的地方,組裝描述工件的模型并返回它。SCA contribution服務(wù)在所有注冊 了工件處理器的工件上調(diào)用ArtifactProcessor.read()。假如你的模型引用了其他的模型,不需要立刻裝載那些模型,你只需要保持描述 引用的信息,在resolve階段,你將會把該信息轉(zhuǎn)換成指向被引用模型的指針。注意:你沒有必要在這個時刻完全讀取并裝載模型,你可以在以后來完成這些 工作。

            ? 解析階段:這個階段讓你有機(jī)會解析對其他模型的引用。這個時刻,SCA contribution中所有的描述工件的模型都已經(jīng)讀取,并注冊了工件解析器,準(zhǔn)備被解析。

            裝載Java SCA

            SCA服務(wù)裝配以SCDL文件的形式被發(fā)布到SCA域中。Tuscany運(yùn)行時工件處理器將SCDL裝載成一系列模型對象。這些模型對象是一系列持有元數(shù)據(jù)信息的Java bean。

            有兩種裝載器:

          •   StAXElementLoader:從StAX(Streaming API for XML)事件載入XML元素
          •   ComponentTypeLoader:通過解析文件或內(nèi)省機(jī)制來載入實現(xiàn)的組件類型

            裝載組件類型

            為特定的實現(xiàn)載入組件類型定義:

          •   如何做是實現(xiàn)規(guī)范
          •   也許會裝載XML文件(該文件由具體實現(xiàn)來定位)
          •   也許內(nèi)省實現(xiàn)工件(例如 Java注解機(jī)制)
          •   或其他的任何方式

            Loading composite componentType Loader

          •   從提供的URL中載入SCDL
          •   從composite包解壓并載入SCDL
          •   POJO componetType Loader
          •   內(nèi)省Java 注解
          •   利用可插入的注解處理框架來內(nèi)省Java類

            運(yùn)行時工件的類圖

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


          posted on 2008-04-26 00:00 gembin 閱讀(610) 評論(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
          主站蜘蛛池模板: 来宾市| 湘乡市| 怀安县| 周宁县| 同江市| 怀集县| 屏山县| 德州市| 商都县| 玉树县| 疏附县| 林口县| 玛沁县| 铜川市| 平凉市| 安西县| 商南县| 临桂县| 富顺县| 南城县| 扎兰屯市| 容城县| 阿克| 景洪市| 西峡县| 崇明县| 施甸县| 太湖县| 奇台县| 桐柏县| 通道| 建水县| 长丰县| 德阳市| 鄂伦春自治旗| 石家庄市| 平江县| 尼玛县| 昂仁县| 陇南市| 精河县|