引言
在本系列的第 1 部分,我們引入了服務(wù)組件體系結(jié)構(gòu)作為編程模型來構(gòu)建和組裝集成解決方案,簡要介紹了什么是 SCA,以及一些相關(guān)術(shù)語的定義。在第 2 部分,我們討論了引用和限定符,并說明了如何將各種組件連接到一起以創(chuàng)建 SCA 模塊。在第 3 部分,我們將深入了解構(gòu)建 SCA 模塊的主要好處之一,即能以各種組件為基礎(chǔ)垂直構(gòu)建集成解決方案。
隨著系統(tǒng)不斷發(fā)展而變得更為復(fù)雜,有必要將各種解決方案進(jìn)行水平集成;組織中的不同部門可能需要構(gòu)建自己的解決方案并稍后將其集成到一起,或者可能不同的業(yè)務(wù)合作伙伴將需要通過 Internet 集成其解決方案。圖 1 顯示了一個(gè)此類水平集成的示例:
圖 1. 集成系統(tǒng)
我們在第 1 部分中定義了 SCA 導(dǎo)入和導(dǎo)出,但我們將在本文中對其進(jìn)行更為深入的研究,并繼續(xù)構(gòu)建我們的精簡示例。具體來說,將重點(diǎn)討論使用 SCA 綁定的 SCA 導(dǎo)入和導(dǎo)出。SCA 綁定允許一個(gè)模塊中的 SCA 組件使用 SCA 編程模型與另一個(gè)模塊中的 SCA 組件通信。
在本文中,我們還將升級到 IBM WebSphere Integration Developer V6.0.1,該版本允許構(gòu)建特定的集成解決方案,以將 IBM WebSphere Process Server V6.0.1 或 IBM WebSphere Enterprise Service Bus V6.0.1 解決方案結(jié)合使用。在這個(gè)新版本中,我們還添加了對構(gòu)建各種企業(yè)服務(wù)總線(Enterprise Service Bus,ESB)中介的支持。(WebSphere ESB 運(yùn)行時(shí)是 WebSphere Process Server 的子集;有關(guān)更多信息,請參閱參考資料。)
導(dǎo)入與導(dǎo)出回顧
正如在第 1 部分中提到的,用于進(jìn)行模塊到模塊和模塊到外部服務(wù)調(diào)用的機(jī)制分別稱為導(dǎo)入和導(dǎo)出。導(dǎo)入和導(dǎo)出是從模塊角度而言,而模塊是一個(gè)執(zhí)行特定業(yè)務(wù)功能的自包含組件包:
-
當(dāng)模塊希望為其他實(shí)體(外部服務(wù)或其他模塊)提供調(diào)用業(yè)務(wù)功能的能力時(shí),它將導(dǎo)出此功能。導(dǎo)出還提供通過各種不同的傳輸協(xié)議提供此服務(wù)的能力。導(dǎo)出與模塊內(nèi)的特定組件關(guān)聯(lián)。
-
當(dāng)模塊希望利用其他實(shí)體(外部服務(wù)或模塊)的功能時(shí),該模塊將導(dǎo)入此功能。導(dǎo)入還提供通過各種傳輸協(xié)議與服務(wù)提供者交換的能力。
圖 2 顯示了一個(gè)使用導(dǎo)入和導(dǎo)出的 SCA 組裝。該圖表明,導(dǎo)出是外部的入口點(diǎn),而導(dǎo)入則允許您調(diào)用模塊外的功能。
圖 2. SCA 導(dǎo)入和導(dǎo)出
當(dāng)通過導(dǎo)入和導(dǎo)入調(diào)用 SCA 組件時(shí),參數(shù)將按值傳遞,即參數(shù)將從一個(gè)結(jié)構(gòu)中復(fù)制到另一個(gè)結(jié)構(gòu)。圖 3 顯示了兩個(gè)彼此進(jìn)行通信的 SCA 模塊,并說明了 SCA 導(dǎo)入如何與 SCA 導(dǎo)出匹配。
圖 3. SCA 導(dǎo)入和導(dǎo)出
將 SCA 組件粘附到一起的連接機(jī)制抽象出了大部分基礎(chǔ)結(jié)構(gòu)級的代碼。例如,可以將連接機(jī)制定義為同步或異步的,操作可以為單向的或?yàn)檎埱?響應(yīng)型,或者可以定義組件間的事務(wù)處理行為。SCA 將為您處理基礎(chǔ)結(jié)構(gòu)細(xì)節(jié)。
導(dǎo)入和導(dǎo)出可以與其他技術(shù)綁定,如 JMS、Enterprise JavaBeans (EJB) 或 Web 服務(wù),如圖 4 所示。通過綁定到這些技術(shù),可以通過使用 SCA 編程模型來讓 Web 服務(wù)客戶機(jī)調(diào)用 SCA 模塊,或者讓 SCA 模塊調(diào)用現(xiàn)有 EJB 模塊(由于 EJB 導(dǎo)入是由 Java? 接口定義的,所以使用 EJB 導(dǎo)入有一些限制;因此,BPEL 之類——要求合作伙伴支持 WSDL——無法調(diào)用 EJB 導(dǎo)入。詳見后文)。
圖 4. 與其他技術(shù)的導(dǎo)入與導(dǎo)出
導(dǎo)入/導(dǎo)出綁定
面向服務(wù)的體系結(jié)構(gòu)的一個(gè)關(guān)鍵在于能夠公開采用大量綁定選項(xiàng)的服務(wù),以及能夠使用行業(yè)規(guī)范調(diào)用服務(wù)。正如所指出的,WebSphere Process Server 和 WebSphere ESB 提供了一系列不同的綁定類型來幫助滿足此類需求。綁定類型使用 Assembly Editor 與導(dǎo)出和導(dǎo)入關(guān)聯(lián)。目前有五種主要的綁定類型:
-
SCA——用于模塊間的 SCA 調(diào)用的綁定類型。該綁定類型是配置最簡單的類型,可提供模塊間的無縫集成。
-
Web 服務(wù)——可提供調(diào)用外部 Web 服務(wù)和將模塊內(nèi)的功能作為 Web 服務(wù)公開的功能。缺省情況下,Web 服務(wù)將使用 doc-lit 包裝樣式,可以與 HTTP 和 JMS 協(xié)議一起使用。Web 服務(wù)綁定功能是從基礎(chǔ) WebSphere Application Server 基本 Web 服務(wù)引擎派生的,受到相同的限制。
-
企業(yè)信息系統(tǒng)(Enterprise Information Systems,EIS)——提供通過 WebSphere JCA Adapter 集成到現(xiàn)有 EIS 系統(tǒng)的功能。此綁定類型的可用配置將根據(jù)目標(biāo)不同而有所改變(SAP、JDBC Adapter 等等)。企業(yè)數(shù)據(jù)發(fā)現(xiàn)服務(wù)通常與每個(gè)適配器一起提供,以幫助創(chuàng)建業(yè)務(wù)對象和導(dǎo)入與導(dǎo)出綁定。
-
Java Messaging Service——提供與使用 JMS 作為消息傳遞協(xié)議的端點(diǎn)進(jìn)行集成的功能。在這種情況下,導(dǎo)入和導(dǎo)出使用數(shù)據(jù)綁定來幫助解析正確的業(yè)務(wù)對象/操作組合。
-
無狀態(tài)會話 Bean——提供使用 Java 接口與無狀態(tài)會話 Bean 集成的功能。此功能只有在將 Java 引用連接到 Java 接口時(shí)才可用。在 WebSphere Integration Developer 中,使用 WSDL 引用的組件不允許連接到無狀態(tài)會話 Bean 提供的 Java 接口。在此情況下,要求使用具有 WSDL 接口和 Java 引用的中間組件。
在本文中,我們將更深入地討論 SCA 綁定的情況。本系列的后續(xù)文章將對其他導(dǎo)入/導(dǎo)出綁定進(jìn)行更為深入的分析。
SCA 綁定
SCA 綁定提供了一致的方法來在 WebSphere Process Server 或 WebSphere ESB 環(huán)境中跨模塊邊界進(jìn)行通信。將基于客戶機(jī)模塊使用的調(diào)用模式自動(dòng)選擇 SCA 綁定所使用的基礎(chǔ)協(xié)議。
SCA 提供四種調(diào)用模式。
- 同步——客戶機(jī)發(fā)出請求,并等待響應(yīng)。
- 異步單向——客戶機(jī)發(fā)出請求,不等待響應(yīng)。
- 異步延遲響應(yīng)——客戶機(jī)發(fā)出請求,客戶機(jī)將在稍后請求響應(yīng)。
- 異步回調(diào)——客戶機(jī)發(fā)出請求,目標(biāo)將調(diào)用使用響應(yīng)調(diào)用客戶機(jī)實(shí)現(xiàn)的服務(wù)。
WebSphere Process Server 或 WebSphere ESB SCA 運(yùn)行時(shí)將確定何時(shí)使用基礎(chǔ)系統(tǒng)集成總線(對于異步調(diào)用模式)或 RMI/IIOP(對于同步調(diào)用模式)。
SCA 綁定是由導(dǎo)出驅(qū)動(dòng)的。在 SCA 模塊安裝到 WebSphere Process Server 的過程中,將創(chuàng)建必要的支持構(gòu)件:
- 對于異步調(diào)用,將在 SCA.SYSTEM.<cell name>.Bus 中創(chuàng)建計(jì)算單元范圍內(nèi)的服務(wù)集成總線(Service Integration Bus,SIBus)目的地。
- 對于同步通信,將創(chuàng)建一個(gè)指向模塊會話 Bean 的計(jì)算單元范圍內(nèi)的名稱空間綁定;模塊會話 Bean 是無狀態(tài)會話 Bean,供模塊用于各種目的,如作為工作邊界、安全配置等的單元。
導(dǎo)入和導(dǎo)出文件一起工作,其中導(dǎo)入文件包含關(guān)于導(dǎo)出的重要信息,可幫助任意數(shù)量的客戶機(jī)導(dǎo)入目標(biāo)服務(wù)。
SCA 運(yùn)行時(shí)通過使用 .import 文件中的信息和調(diào)用模式(sync 或 async),可確定是使用 SIBus 目的地還是 WebSphere 名稱空間綁定。
將創(chuàng)建一系列 SIBus(請參閱參考資料)目的地來支持 WebSphere Process Server 和 WebSphere ESB 提供的各種異步調(diào)用類型;將為模塊、組件、導(dǎo)入和導(dǎo)出創(chuàng)建目的地。每個(gè)目的地和轉(zhuǎn)發(fā)路由路徑將確保將消息路由到正確的目標(biāo)服務(wù)。圖 5 顯示了 SIBus 目的地的一個(gè)示例。
圖 5. SIBus 目的地
此外,將為模塊中的每個(gè) SCA 導(dǎo)出創(chuàng)建一個(gè)名稱空間綁定,如圖 6 中所示。此綁定將在計(jì)算單元范圍內(nèi)創(chuàng)建,并遵循以下命名模式:
sca_ + <Module Name> + _export_ + <ExportName>。
圖 6. 名稱空間綁定
在給定這兩組構(gòu)件范圍的情況下,SCA 導(dǎo)出綁定在整個(gè)計(jì)算單元內(nèi)都可見??蛻舳四K和目標(biāo)模塊可以放置在計(jì)算單元內(nèi)的任何 WebSphere Process Server 或 WebSphere ESB 服務(wù)器上,且仍然能夠進(jìn)行通信。
導(dǎo)出限定符
使用 SCA 綁定的導(dǎo)入是 SCA 組件在另一個(gè)模塊中的邏輯表示。因此,可以采用與圖 7 所示相同的方法在指向?qū)С龅囊蒙隙x限定符。
圖 7. 添加限定符
導(dǎo)出并不包含任何限定符;相反,將要在導(dǎo)出的組件上放置限定符,詳見第 2 部分中的說明。
庫項(xiàng)目
跨越模塊邊界,必須考慮共享協(xié)定這一事實(shí)。應(yīng)用程序通過接口進(jìn)行通信,彼此傳遞數(shù)據(jù)對象。這意味著接口和業(yè)務(wù)對象應(yīng)對模塊可見,或位于與模塊相同的位置。為了減少在每個(gè)模板中重復(fù)定義相同的接口和數(shù)據(jù)對象,WebSphere Integration Developer 包括了一個(gè)特殊的 SCA 庫模塊,可以將其添加到 SCA 模塊,就像 Java JAR 文件可以為 EAR 文件中獨(dú)立的 JAR 一樣。(事實(shí)上,WebSphere Integration Developer 就是這樣處理庫的。)這就允許您在單個(gè)位置中定義接口和業(yè)務(wù)對象,然后讓所有模塊對其進(jìn)行共享。稍后我們將給出一個(gè) SCA 庫示例。
我們的示例應(yīng)用程序
我們將繼續(xù)使用在整個(gè)系列中使用的 Credit Approval 應(yīng)用程序。在本文中,我們將演示如何通過將 Credit History 和 Credit Agency 模塊外部化來使各個(gè)模塊分離,以了解如何配置導(dǎo)出和導(dǎo)入。為了進(jìn)行說明,我們還將演示如何在模塊間共享 SCA 庫。
為了運(yùn)行此示例,您將需要正確安裝 WebSphere Integration Developer V6.0.1(該版本支持 WebSphere ESB)并在您的計(jì)算機(jī)上運(yùn)行(請參閱參考資料),還要獲取本文所附的下載材料,其中包含兩個(gè) SCA 模塊(Credit Agency 和 Credit History 模塊)和一個(gè)具有共享接口及業(yè)務(wù)對象的 SCA 庫。
-
設(shè)置工作區(qū)。
-
啟動(dòng) WebSphere Integration Developer。打開新工作區(qū)并關(guān)閉歡迎屏幕。
-
您將需要導(dǎo)入所下載的 Project Interchange。為了導(dǎo)入 Project Interchange,在 Business Integration 視圖內(nèi)單擊右鍵,然后選擇 Import,如圖 8 所示。
圖 8. Eclipse 導(dǎo)入向?qū)?/strong>
-
選擇 Project Interchange,然后選擇 Next (圖 9)。
圖 9. 導(dǎo)入 Project Interchange
-
選擇下載文件 <Download_root>/SCAArticlePart3.zip,然后單擊 Select All,并單擊 Finish (圖 10)。
圖 10. Select All
-
檢查我們剛剛導(dǎo)入的構(gòu)件:
-
從 Business Integration 透視圖中展開 CreditApprovalLibrary。正如前面提到的,SCA 庫可以用于方便地保存模塊間共享的業(yè)務(wù)對象和接口。圖 11 顯示了 Business Integration 視圖中的 CreditApprovalLibrary。
圖 11. CreditApprovalLibrary
通過在 Business Integration 透視圖內(nèi)上下文有關(guān)的菜單中選擇 New => Library,可以方便地創(chuàng)建 Library 項(xiàng)目。在此例中,我們已經(jīng)提供了接口和數(shù)據(jù)對象。
-
展開 CreditAgencySCAModule 和 CreditHistory 模塊。
-
為每個(gè)模塊打開 Assembly Editor。在前面的第 2 部分中的示例中,我們在單個(gè)模塊中包含了多個(gè)組件。在此示例中,我們將對實(shí)現(xiàn)進(jìn)行分離,以模擬多個(gè)獨(dú)立的解決方案。通常,SCA 具有包含多個(gè)組件的完整解決方案。對于本文,我們假定這些為不同開發(fā)組(不同的管理人員、日程安排和項(xiàng)目規(guī)劃)開發(fā)的完整解決方案。圖 12 顯示了 Business Integration 視圖中的 SCA 模塊。
圖 12. SCA 模塊
-
這兩個(gè) SCA 模塊都依賴于 SCA 庫模塊;這個(gè)依賴關(guān)系可以在 Dependency Editor 看到。分別右鍵單擊每個(gè) SCA 模塊,并選擇 Open Dependency Editor(圖 13)。
圖 13. 打開 Dependency Editor
-
檢查每個(gè)模塊對應(yīng)的 Dependency Editor,以確保在兩個(gè)模塊間共享了 CreditApprovalLibrary,如果是這樣,CreditApprovalLibrary 將顯示為圖 14 所示的情況。
圖 14. CreditApprovalLibrary
- 關(guān)閉編輯器。

 |

|
創(chuàng)建 SCA 導(dǎo)出
接下來,我們將為每個(gè)模塊創(chuàng)建 SCA 導(dǎo)出,以便可以從其他 SCA 模塊調(diào)用此模塊。
-
為 CreditAgencySCAModule 創(chuàng)建導(dǎo)出:
-
在 WebSphere Integration Developer 中,打開 CreditAgencySCAModule Assembly Editor。在 Business Integration 視圖中展開 CreditAgencySCAModule,并雙擊 CreditAgencySCAModule Assembly Editor 圖標(biāo),如下面的圖 15 中所示。
圖 15. 打開 Assembly Editor
-
要?jiǎng)?chuàng)建導(dǎo)出,請右鍵單擊 CreditApproval 組件,并選擇 Export =>SCA Binding(圖 16)。
圖 16. 創(chuàng)建具有 SCA 綁定的 SCA 導(dǎo)出
-
將自動(dòng)為 CreditAgency 組件創(chuàng)建具有 SCA 綁定的導(dǎo)出,如圖 17 中所示。
圖 17. SCA 導(dǎo)出
-
在 Assembly Editor 中選中此導(dǎo)出的同時(shí)查看 Properties 視圖,以檢查導(dǎo)出的各個(gè)屬性。您將會在 Details 選項(xiàng)卡中看到操作的 SCA 詳細(xì)信息,如圖 18 中所示。
圖 18. SCA 導(dǎo)出詳細(xì)信息
-
切換到 Qualifiers 選項(xiàng)卡(圖 19)。您會發(fā)現(xiàn)無法添加任何限定符。這是因?yàn)閷?dǎo)出將使用其所指向的組件的限定符。
圖 19. 導(dǎo)出沒有限定符
-
保存并關(guān)閉 Assembly Editor。
-
采用類似的方法為 CreditHistorySCAModule 創(chuàng)建導(dǎo)出:
-
和前面一樣,為 CreditHistorySCAModule 打開 Assembly Editor。
-
和前面一樣,生成具有 SCA 綁定的導(dǎo)出(圖 20)。
圖 20. SCA 導(dǎo)出
-
保存并關(guān)閉編輯器。
創(chuàng)建 Credit Approval 模塊
現(xiàn)在我們將創(chuàng)建要通過導(dǎo)入調(diào)用其他兩個(gè)模塊的 CreditApprovalModule。
-
首先,創(chuàng)建一個(gè)新的 SCA 模塊:
-
在 Business Integration 視圖中單擊右鍵,然后選擇 New => Module。
-
將該模塊命名為 CreditApprovalSCAModule (圖 21)。確保選中 Use Default,然后單擊 Finish。
圖 21. 新建 SCA 模塊
-
右鍵單擊新創(chuàng)建的 CreditApprovalSCAModule,并選擇 Open Dependency Editor(圖 22)。
圖 22. 打開 Dependency Editor
-
由于 CreditApproval 模塊將調(diào)用其他兩個(gè)模塊,因此需要共享在其間傳遞的接口和業(yè)務(wù)對象。請記住,我們要使用庫來存儲這些接口和業(yè)務(wù)對象。在 Dependency Editor 中的 Libraries 節(jié)中選擇 Add,如圖 23 所示。
圖 23. 向 SCA 模塊添加庫
-
選擇 CreditApprovalLibrary,然后單擊 OK。
-
現(xiàn)在將創(chuàng)建一個(gè)調(diào)用組件。出于演示目的,我們將使用基于 Java 的簡單組件;在以后的文章中,我們將展示調(diào)用各種組件和模塊的 BPEL 流。
-
雙擊 CreditApprovalSCAModule Assembly 圖標(biāo),以打開 CreditApprovalSCAModule Assembly Editor(圖 24)。
圖 24. 打開 SCA Assembly Editor
-
將 SCA 組件 (圖 25)拖放到 Assembly Editor 上。
圖 25. 將 SCA 組件拖放到 Assembly Editor 上
-
單擊文本,并鍵入名稱,從而將組件重命名為 CreditApproval,如圖 26 中所示。
圖 26. 更改組件名稱
-
接下來,我們將向該組件添加接口。我們將接口存儲在庫項(xiàng)目中。
-
在組件上單擊 Interface 圖標(biāo)(圖 27 的圓圈內(nèi)),然后從菜單中選擇 CreditRequest。
圖 27. 向 SCA 組件添加接口
-
單擊 OK。
我們剛剛創(chuàng)建了一個(gè) SCA 組件。該組件將通過導(dǎo)入調(diào)用其他兩個(gè)模塊。
創(chuàng)建導(dǎo)入
我們已經(jīng)完成了導(dǎo)出的創(chuàng)建,現(xiàn)在就可以開始創(chuàng)建 SCA 導(dǎo)入了。我們需要為要調(diào)用的每個(gè)導(dǎo)出創(chuàng)建一個(gè) SCA 導(dǎo)入。在我們的示例中,我們將進(jìn)行以下工作:
- 調(diào)用 CreditAgency 和 CreditHistory 模塊。
- 更新 CreditHistory 導(dǎo)入的限定符,以在異步調(diào)用組件時(shí)正確地處理事務(wù)處理行為。
- 假定 History 請求需要花一定的時(shí)間進(jìn)行調(diào)用,那么我們將異步發(fā)出 History 請求。
- 在請求之后,同步調(diào)用 CreditAgency 模塊。
- 獲取信用分?jǐn)?shù)后,以延遲方式獲取 History Response。
-
首先,為 CreditAgency 調(diào)用創(chuàng)建導(dǎo)入:
-
從面板上將 import 圖標(biāo)拖放到 Assembly Editor 上(圖 28)。
圖 28. 將導(dǎo)入拖放到 Assembly Editor 上
-
單擊文本并鍵入 CreditAgencyImport ,從而重命名導(dǎo)入,如圖 29 中所示。
圖 29. 重命名導(dǎo)入
-
接下來,我們將添加相應(yīng)的接口。在此情況下,導(dǎo)入的接口必須與 CreditAgencySCAModule 中對應(yīng)的導(dǎo)出的導(dǎo)入匹配。
單擊 Import 上方的 Interface 圖標(biāo)(圖 30 的圓圈內(nèi)),然后選擇 CreditAgency 接口。
圖 30. 向 SCA 導(dǎo)入添加導(dǎo)入
-
添加相應(yīng)的綁定,在此例中,添加 SCA 綁定:
-
右鍵單擊導(dǎo)入,并選擇 Generate Binding => SCA Binding(圖 31)。
圖 31. 向?qū)胩砑?SCA 綁定
-
在 Assembly Editor 中突出顯示導(dǎo)入,轉(zhuǎn)到 Properties 視圖,并選擇 Binding 部分(圖 32)。單擊 Browse。
圖 32. 瀏覽導(dǎo)出
-
選擇 CreditAgencyExport(圖 33)。
圖 33. 選擇導(dǎo)出
-
接下來,我們需要將 CreditApproval 組件連接到 CreditAgencyImport。
-
在 Assembly Editor 中選擇 CreditApproval 組件,并將一個(gè) wire 拖放到 CreditAgencyImport。
圖 34. 將 SCA 組件連接到 SCA 導(dǎo)入
-
在對話框中單擊 OK,以在 CreditApproval 組件上創(chuàng)建引用(圖 35)。(在第 2 部分中對引用進(jìn)行了討論。)
圖 35. 確認(rèn)引用創(chuàng)建
-
保存編輯器,并使其保持為打開狀態(tài)。下面的圖顯示了已連接的組件的最終結(jié)果。
圖 36. 已連接的 SCA 模塊
-
接下來,我們將為 CreditHistoryModule 創(chuàng)建導(dǎo)入。
-
和前面一樣,將另一個(gè) import 拖放到 Assembly Editor 并將其命名為 CreditHistoryImport 。
-
向?qū)胩砑?CreditHistory 接口,如圖 37 中所示。
圖 37. 添加 Credit History 接口
-
生成 SCA 綁定,并將 CreditApproval 連接到 CreditHistoryImport。圖 38 顯示了最終的結(jié)果。
圖 38. 最終結(jié)果
請記住,我們假定 Credit History 組件的處理時(shí)間會稍微長一些,因此首先將觸發(fā)異步請求以獲取 History,并在稍后檢索響應(yīng)。在 CreditHistory 運(yùn)行的同時(shí),我們將從 CreditAgency 模塊獲取 Credit Score。然后我們將從 CreditHistory 捕獲響應(yīng)。我們可以為“服務(wù)”使用正確的 SCA API 來對 Credit History 模塊進(jìn)行異步調(diào)用。在這種情況下,我們希望使用前面描述的延遲響應(yīng)調(diào)用模式。
生成實(shí)現(xiàn)
-
我們現(xiàn)在將為 CreditApproval 組件創(chuàng)建一個(gè)實(shí)現(xiàn)。在我們的示例中,將使用一個(gè)簡單的 Java 組件。
-
在 Assembly Editor 中,右鍵單擊 CreditApproval 組件,并選擇 Generate Implementation => Java。
圖 39. 生成 Java 實(shí)現(xiàn)
-
暫時(shí)將該類放在缺省包中(圖 40)。
圖 40. 缺省包
-
如果希望在稍后添加本地 Java 客戶機(jī),請?jiān)?Implement As... 對話框中選擇 Yes,以創(chuàng)建一個(gè)匹配的 Java 接口(圖 41)。
圖 41. 為本地 Java 客戶機(jī)創(chuàng)建 Java 接口
-
現(xiàn)在我們將編寫實(shí)現(xiàn)的代碼。
-
應(yīng)在 Java 編輯器中打開實(shí)現(xiàn)類。正如您在 Java 編輯器中看到的,WebSphere Integration Developer 添加了方便的 Helper,以通過檢查模塊組裝來獲取合作伙伴。如果我們首先生成 Java 類,則這些方法將不存在。
public CreditAgency locateService_CreditAgencyPartner() {
return (CreditAgency) ServiceManager.INSTANCE
.locateService("CreditAgencyPartner");
}
public CreditHistory locateService_CreditHistoryPartner() {
return (CreditHistory) ServiceManager.INSTANCE
.locateService("CreditHistoryPartner");
}
|
-
將下面的代碼(在 <download_root>/SCAArticleSeries3/codeSnippet1.txt 中)粘貼到 calulateCreditScore 方法內(nèi)。異步調(diào)用模式以粗體突出顯示。
ServiceManager serviceManager = new ServiceManager();
// create credit rating return data object using the BO factory
BOFactory bof =
(BOFactory)serviceManager.locateService("com/ibm/websphere/bo/BOFactory"
);
DataObject creditRating = bof.create("http://CreditApproval",
"CreditRating");
creditRating.setString("customerId",
creditApp.getString("customerId"));
// create and call credit history service using async deferred response invocation
// pattern.
CreditHistoryAsync cha = (CreditHistoryAsync)
serviceManager.locateService("CreditHistoryPartner");
Ticket tix = cha.getCreditLimitAsync(creditApp);
CreditAgency creditAgency = (CreditAgency) locateService_CreditAgencyPartner();
Integer creditScore = creditAgency.getCreditScore(creditApp);
Double creditLimit = cha.getCreditLimitResponse(tix, Service.WAIT);
creditRating.setInt("creditScore", creditScore.intValue());
creditRating.setDouble("creditLimit", creditLimit.doubleValue());
return creditRating;
|
-
因?yàn)槿鄙賹?dǎo)入,因此在 Eclipse Editor 中應(yīng)報(bào)告一些編譯錯(cuò)誤(假定啟動(dòng)了自動(dòng)生成功能)。在 Java 編輯器中任意位置單擊右鍵,并選擇 Source => Organize Imports,如圖 42 中所示。
圖 42. Organize imports
-
將 BOFactory 接口解析到 com.ibm.websphere.bo,如圖 43 中所示。
圖 43. 解析 BOFactory
-
將 Service 接口解析到 com.ibm.websphere.sca,如圖 44 中所示。
圖 44. 將服務(wù)導(dǎo)入解析到 com.ibm.websphere.sca
-
保存 Assembly Editor。

 |

|
測試解決方案
現(xiàn)在可以測試我們的解決方案了。集成模塊時(shí),每個(gè)模塊首先應(yīng)進(jìn)行相應(yīng)的單元測試。在本文中,我們將假定各個(gè)開發(fā)團(tuán)隊(duì)(CreditHistory 和 CreditAgency)都已對其組件進(jìn)行了相應(yīng)的測試。
-
將所有三個(gè)模塊都添加到 WebSphere Process Server:
-
在 WebSphere Integration Developer 中,轉(zhuǎn)到 Servers 視圖,右鍵單擊 WebSphere Process Server,并選擇 Add/Romove Project(圖 45)。
圖 45. 向 WebSphere Process Server 添加或刪除項(xiàng)目
-
選擇 Add All,以將全部 SCA 模塊添加到服務(wù)器(圖 46)。
圖 46. 添加所有模塊
-
單擊 Finish。
-
通過 WebSphere Integration Developer 組件測試工具啟動(dòng)服務(wù)器。
- 從 CreditApproval 模塊的 Assembly Editor 中,右鍵單擊 CreditApproval 組件,并選擇 Test Component,如圖 47 所示。
圖 47. 啟動(dòng) Test Component 功能
-
轉(zhuǎn)到 Configurations 選項(xiàng)卡并刪除兩個(gè)模擬器,如圖 48 中所示。如果合作伙伴不可用,可以使用模擬器來進(jìn)行模擬,由于我們有實(shí)際的組件,因此不需要模擬器。
圖 48. 刪除模擬器
-
回到 Events 頁,在 Initial 響應(yīng)參數(shù)中輸入一些輸入數(shù)據(jù),如圖 49 中所示,然后單擊 Continue。
圖 49. 運(yùn)行組件測試
-
在 Deployment Location 對話框中,選擇 WebSphere Process Server v6.0。(圖 50)
圖 50. 選擇 WebSphere Process Server 運(yùn)行時(shí)
-
現(xiàn)在我們將對調(diào)用路徑和結(jié)果進(jìn)行檢查。
-
回到 Events 選項(xiàng)卡。從調(diào)用路徑中選擇最后一個(gè) Return,以創(chuàng)建結(jié)果,如圖 51 中所示。
圖 51. 選擇 Return
-
應(yīng)該看到與圖 52 類似的結(jié)果。
圖 52. 結(jié)果
-
如果分析調(diào)用順序,將會發(fā)現(xiàn)采用了異步調(diào)用:我們沒有采用“請求-響應(yīng)-請求-響應(yīng)”的模式,而是使用了“異步請求-請求-響應(yīng)-異步響應(yīng)”模式。(圖 53)
圖 53. 異步調(diào)用路徑
-
不保存,直接關(guān)閉測試編輯器并停止服務(wù)器。

 |

|
|