Apache Tuscany SCA Java 架構(gòu)指南 www. 時(shí)間 : 2008-01-21 作者:佚名 編輯:本站 點(diǎn)擊: 589 [ 評(píng)論 ] -
概況SCA JAVA 運(yùn)行時(shí)是由內(nèi)核和擴(kuò)展兩部分組成。內(nèi)核本質(zhì)上是一個(gè)連接多個(gè)VM的引擎,使用依賴注入(Dependency Injection 內(nèi)核其核心是設(shè)計(jì)簡(jiǎn)單和功能有限的。它將不同的功能單元連接到一起,并且提供SPIs以讓擴(kuò)展之間可以互動(dòng),例如服務(wù)發(fā)現(xiàn),可靠性,支持透明協(xié)議,等等。這些功能都以擴(kuò)展的方式提供。 擴(kuò)展擴(kuò)展提高了SCA運(yùn)行時(shí)的功能型。擴(kuò)展類型并不固定,Tuscany的核心通過提供一個(gè)可調(diào)整的模型的設(shè)計(jì)使其盡可能的靈活。現(xiàn)在,已知的擴(kuò)展類型有:
具體細(xì)節(jié)可參考擴(kuò)展開發(fā)向?qū)?/a> JAVA SCA 運(yùn)行時(shí)高層次概覽下圖是Java SCA運(yùn)行時(shí)的一個(gè)高層次概覽,其中包括以下關(guān)鍵模塊:
bootsrapBootstrap 進(jìn)程受主機(jī)環(huán)境控制。默認(rèn)進(jìn)程是由DefaultBootstrapper實(shí)現(xiàn)的。運(yùn)行時(shí)進(jìn)程服務(wù)使用SCA XML形式進(jìn)行集成,也可以采用其他形式:
集成模型SCA的裝配模型在Tuscany中是通過一系列接口實(shí)現(xiàn)的。以下是一些關(guān)鍵件:
發(fā)布Tuscany運(yùn)行時(shí)提供了一個(gè)框架,以支持SCA發(fā)布。該框架可針對(duì)以下擴(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í)現(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ò)展請(qǐng)參考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í)以后進(jìn)行合并?;诒馄降哪P?,我們可以在構(gòu)建級(jí)獲取全部的信息。 2、配置:在此階段,復(fù)合組件的層次被引導(dǎo)到配置一個(gè)組件的實(shí)現(xiàn),在組件間以及組件和外部服務(wù)之間,引用綁定和服務(wù)綁定會(huì)在以后的步驟中用來(lái)創(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)換以及交易控制。對(duì)于一個(gè)組件引用來(lái)說,我們創(chuàng)建運(yùn)行時(shí)連接來(lái)表示通過綁定的對(duì)外執(zhí)行;對(duì)于組件服務(wù)呢,我們創(chuàng)建運(yùn)行時(shí)連接表示對(duì)實(shí)現(xiàn)類型的向內(nèi)連接?;卣{(diào)連接可以被附加到組件服務(wù)之上,表示來(lái)自服務(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)已接受從綁定層來(lái)的連接請(qǐ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)件連接所持有,因此它是無(wú)狀態(tài)的,允許引入新的攔截器以及重新連接等動(dòng)態(tài)事件的發(fā)生。 加載SCA部件組件處理器組件處理器被用來(lái)處理發(fā)布包中的組件,為了保持對(duì)發(fā)布服務(wù)可用,組件處理器需要使用組件處理擴(kuò)展進(jìn)行自我注冊(cè),組件處理器會(huì)在以下兩個(gè)步驟進(jìn)行調(diào)用:
加載JAVA SCASCA服務(wù)部件在SCA里以SCDL文件的形式進(jìn)行部署,Tuscany運(yùn)行時(shí)組件處理器加載這些SCDL到模型對(duì)象,這些對(duì)象包含了元數(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í)組件的類圖
|
|