檢驗 IBM WebSphere Integration Developer 組裝的SCA 組件的上下文中的引用和連線。
摘自 IBM WebSphere 開發者技術期刊。
引言
在這一系列文章的第 1 部分,我們引入了服務組件體系結構(Service Component Architecture,SCA)作為編程模型來構建和組裝集成解決方案,包括簡要介紹什么是 SCA,以及一些相關術語的定義。我們還提供了一個通過 IBM WebSphere Integration Developer 使用 Java? 構建 SCA 組件的示例,測試了該 SCA 組件,并使用 SCA 客戶端編程模型構建了一個調用該 SCA 組件的示例 JSP 文件。在第 2 部分中,我們將繼續描述引用和連線,并介紹如何使用它們來組裝 SCA 組件。
概述
在第 1 部分介紹的示例中,我們使用了一個簡單的 JSP 客戶端來調用 SCA 組件。該示例只用于演示;當構建您自己的實際自定義應用程序時,您可能會使用標準 J2EE? 組件模型來實現應用程序邏輯。J2EE Web 應用程序將繼續調用 Enterprise JavaBean 來訪問特定于應用程序的功能。實際上,SCA 編程模型是用于業務集成、應用程序組合和解決方案組裝的,而不是用于 J2EE 應用程序開發的。SCA 客戶端(它可以是 J2EE)通常在進程管理器外,例如它可以使用 BPEL 流程來編排工作流。與 BPEL 流程聯合部署的 Web 應用程序也可以使用 SCA 編程模型來調用特定于應用程序的功能。圖 1 顯示了 SCA 生態系統的一個示例。
圖 1. SCA 生態系統
SCA 位于集成層。SCA 組件可以通過導入來調用 SCA 運行時外的應用程序。非 SCA 客戶端可以通過導出調用 SCA 組件。在集成層內,可以通過定義引用和使用連線來組合 SCA 組件,這將在本文中重點介紹。有了連線和引用,您就可以在開發時定義運行時調用的特性;例如,使調用同步或異步,標記調用的轉換邊界,等等。這些特性是在部署時讀取的,它們可以啟用所需的運行時行為。圖 2 闡釋了這些高級概念。
圖 2. 引用和連線的高級視圖
再次說明,我們關注的是集成層,而不是應用層。另外,我們介紹的是較高級的集成,例如工作流編排或與 EIS 系統的高級集成。然而,出于演示目的,我們使用簡單的 Java 示例來顯示如何將組件連接到集成層中,強調的是連線和引用的功能而不是組件本身的實現。(在后續文章中,我們將介紹如何將 SCA 組件實現為 BPEL 流程和狀態機,以及如何應用連線技術。)因此我們使用一個按比例縮減的模型來闡釋引用和連線,如圖 3 所示;然而,我們要記住圖 2 中合適的 SCA 使用遠景。
圖 3. 簡化的引用和連線模型
引用
正如第 1 部分所討論的,SCA 組件被打包成一個 SCA 模塊。一個模塊中的 SCA 組件通過對調用的 SCA 組件定義引用來彼此交互,并且將這些引用連線到相同模塊中的其他 SCA 組件。圖 4 闡釋了這一概念。
圖 4. 引用和連線概念
對調用組件的引用是用 SCDL 表示的,如下所示:
清單 1
<scdl:component xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:java="http://www.ibm.com/xmlns/prod/websphere/scdl/java/6.0.0"
xmlns:ns1="http://CreditApproval/CreditRequest"
xmlns:scdl="http://www.ibm.com/xmlns/prod/websphere/scdl/6.0.0"
xmlns:wsdl="http://www.ibm.com/xmlns/prod/websphere/scdl/wsdl/6.0.0"
displayName="CreditApproval" name="CreditApproval">
<interfaces>
<interface xsi:type="wsdl:WSDLPortType" portType="ns1:CreditRequest">
<method name="calulateCreditScore"/>
</interface>
</interfaces>
<references>
<reference name="CreditHistoryPartner">
<interface xsi:type="java:JavaInterface"
interface="approval.credit.credit.history.CreditHistory">
<method name="getCreditLimit"/>
</interface>
<wire target="CreditHistory"/>
</reference>
<reference name="CreditAgencyPartner">
<interface xsi:type="java:JavaInterface"
interface="approval.credit.credit.agency.CreditAgency">
<method name="getCreditScore"/>
</interface>
<wire target="CreditAgency"/>
</reference>
</references>
<implementation xsi:type="java:JavaImplementation"
class="sca.component.java.impl.CreditApprovalImpl"/>
</scdl:component>
|
引用的好處之一是能夠定義調用期間的服務質量。當在 Assembly Editor 中連線組件時,可以指定服務質量 (QoS) 限定符。這些限定符定義了調用期間在 SCA 運行時管理組件的必要條件。
限定符
使用 SCA,您無需編程或更改服務實現代碼就可以對組件應用 QoS 限定符(例如事務、安全性和可靠的異步調用)。在連線組件時,您可以指定限定符來為組件以及訪問服務的客戶端提供擴展的服務質量。在 IBM WebSphere Process Server 中,您可以在三個地方定義 SCA 限定符:
在運行時,這些規范確定了客戶端如何與目標組件進行交互。運行時環境可以提供所需的任何額外處理,這取決于所指定的限定符。
用于引用的限定符
引用限定符可以指定異步調用的可靠性,以及是否應該聯合目標組件的方法,使之成為任何客戶端事務的一部分。
引用限定符包括:
-
Asynchronous reliability - 允許發生異步調用。這些限定符還允許您指定消息的可靠性、請求和響應超時。同時也能配置 Service Integration Bus——它在 IBM WebSphere Application Server 運行時中提供消息傳遞平臺,因此對 WebSphere Process Server 可用。(有關 Service Integration Bus 的信息,請參閱參考資料。)
-
Suspend transaction - 對于同步調用,當使用同步編輯模型進行調用時,客戶端全局事務上下文始終會被傳播到目標組件。(此限定符只影響客戶端全局事務,因為本地事務從不傳播到目標組件。)對于客戶端不想讓目標組件與客戶端事務聯合的用例,需要使用掛起事務限定符設置來進一步限定引用:
-
True 會在通過服務引用調用組件之前掛起當前全局事務。
-
False(缺省值)指示運行時在通過服務引用調用組件之前不要掛起全局事務。
-
Asynchronous invocation - 確定是否應該進行異步調用(作為任何客戶端事務的一部分)。值:
-
Call(缺省值)指示運行時在進行服務調用的同時將消息提交給異步調用的目的地。
-
Commit 指示運行時將消息提交給異步調用的目的地的工作交給當前工作范圍單元處理。
-
Suspend activity session - 活動會話能夠對可能不支持分布式事務的資源進行更高級的協調。集成解決方案中更可能出現此類情況;客戶端不想讓目標組件與客戶端的活動會話相聯合,所以需要使用掛起活動會話限定符設置來進一步地限定引用:
-
True 會在通過服務引用調用組件之前掛起當前活動會話(如果存在)。
-
False(缺省值)指示運行時在通過服務引用調用組件之前不要掛起任何處于活動狀態的活動會話。
您可以指定引用限定符,以便它們應用于服務組件的所有引用或者只應用于獨立引用。如果需要,您還可以為每個引用指定這些限定符,在這種情況下它們將重寫任何頂級限定符設置。在 Properties 視圖中以灰色表示繼承的限定符,以黑色表示已賦值的限定符。繼承的限定符不能更改,除非您選擇定義它們的所在元素。
用于接口的限定符
接口限定符說明了被目標服務支持的QoS,因此代表了一個與該服務客戶端的約定。
接口限定符包括:
-
Join activity session - 確定目標服務是否愿意加入傳播的活動會話范圍。值:
-
True 指示運行時不要在接口邊界掛起活動會話(如果存在)。
-
False(缺省值)指示運行時在接口邊界掛起活動會話(如果存在)。
-
Join transaction - 確定目標服務是否愿意加入傳播的全局事務。值:
-
True 指示運行時不要在接口邊界掛起全局事務(如果存在)。
-
False(缺省值)指示運行時在接口邊界掛起全局事務(如果存在)。
-
Security permission - 使您能夠在 SCA 組件上定義 J2EE 角色。只有與聲明的角色相關聯的客戶端才能調用該組件。
所有接口限定符都可以應用于組件的三個級別:
- 用于其所有接口
- 用于單個接口
- 用于某個接口的單個操作。
操作的限定符覆蓋接口的限定符;接口的限定符覆蓋組件的所有接口的限定符。
用于實現的限定符
實現限定符提供確定服務權限和/或表示其對事務環境的需求的功能。
接口限定符包括:
-
Activity session - 確定組件的處理是否在一個活動會話中執行,除了全局事務上下文所提供的,它還提供一個備選的工作范圍單元。值:
-
True:組件將在活動會話的上下文中執行。如果活動會話是在調用時出現的,則會添加該組件。
-
False(缺省值):組件將在現有的全局事務(如果存在)或本地事務的上下文中執行。實現限定符為 activitySession=false 的組件必須使用接口限定符 joinActivitySession=false。
-
Any:如果存在活動會話,則組件會加入當前活動會話。如果不存在活動會話,則組件會在現有的工作范圍單元或本地事務的上下文中執行。
-
Transaction - 確定組件處理執行的邏輯工作單元。對于邏輯工作單元,事務期間所做的全部數據修改都是作為一個單元一起提交或作為一個單元回滾的:
-
Global:組件將在全局事務的上下文中執行。如果在調用時存在一個全局事務,則該組件會被添加到該全局事務范圍。如果不存在全局事務,則會建立新的事務范圍。
-
Local(缺省值):組件將在本地事務的上下文中執行。
-
Any:如果存在一個全局事務,則組件將加入當前全局事務范圍。如果不存在全局事務,則組件將在本地事務的上下文中執行。
-
Security identity - 使您能夠指定組件擔當的身份,與部署描述符上的 J2EE Run-As 約束類似。
限定符是在 SCDL 文件中定義的:接口限定符是在接口部分定義的,實現限定符是在實現部分定義的,引用限定符是在引用部分定義的。(有關詳細信息,請查閱 WebSphere Process Server Information Center。)
連線組件
在對引用有了新的理解之后,我們現在可以將一些組件通過連線連接起來。我們將使用的示例十分簡單,但在這個過程中我們也會檢查各種可用的服務質量。我們將繼續介紹在第 1 部分使用的信貸審批示例。
在我們的示例中:
- Credit Approval 組件必須調用 Credit History 組件以及 Credit Agency 組件。
- Credit Approval 組件將作為這兩個服務的一個 Facade。
- Credit Approval 組件需要連線到其他組件。
這一練習所需要的文件可以從本文所附帶的下載文件中獲得。
設置工作區
-
啟動 WebSphere Integration Developer 并創建一個新的工作區(圖 5)。
圖 5. 在 WebSphere Integration Developer 中創建工作區
-
關閉歡迎屏幕(圖 6)。
圖 6. WebSphere Integration Developer 歡迎屏幕
-
要從下載的文件導入項目交換文件,請右鍵單擊 Business Integration 視圖并選擇 Import(圖 7)。
圖 7. 導入下載文件
-
選擇 Project Interchange,然后單擊 Next(圖 8)。
圖 8. 導入項目
-
假設您已經將下載的文件解壓縮到 C: 驅動器,則選擇 CreditApprovalPart2.zip 文件,然后單擊 Select All 和 Finish(圖 9)。
圖 9. 導入項目
檢查組件
在我們的示例中,我們將使用自底向上的開發風格:我們有一個現有的 SCA 組件集并準備對它們進行集成。從 Business Integration 視圖中,您可以檢查該 SCA 模塊:
-
展開 CreditApproval 模塊(圖 10)。
圖 10. 展開的 Credit Approval 模塊
-
請注意,它有三個接口和三個 Java 實現。打開 CreditApprovalImpl Java 實現并轉到 calculateCreditScore() 方法。請注意,calculateCreditScore 同時與 CreditAgency 組件和 CreditHistory 組件進行交互來完成其服務。您很容易想到將 CreditApproval Service 實現為 BPEL 流程或其他組件類型,但在本例中,我們用一個簡單的 Java 組件來作為 Facade。
清單 2
public DataObject calulateCreditScore(DataObject creditApp) {
ServiceManager serviceManager = new ServiceManager();
BOFactory bof = (BOFactory)serviceManager.locateService("com/ibm/websphere/bo/BOFactory");
DataObject creditRating = bof.create("http://CreditApproval", "CreditRating");
creditRating.setString("customerId", creditApp.getString("customerId"));
CreditAgency creditAgency = (CreditAgency)
serviceManager.locateService("CreditAgencyPartner");
Integer creditScore = creditAgency.getCreditScore(creditApp);
CreditHistory creditHistory = (CreditHistory)
serviceManager.locateService("CreditHistoryPartner");
Double creditLimit = creditHistory.getCreditLimit(creditApp);
creditRating.setInt("creditScore", creditScore.intValue());
creditRating.setDouble("creditLimit", creditLimit.doubleValue());
return creditRating;
}
|
-
要打開 Assembly Editor,請雙擊 CreditApproval 集合(圖 11)。當 Assembly Editor 打開時,會顯示三個組件(圖 12)。
圖 11. 打開 Assembly Editor
圖 12. Assembly Editor 中的組件
連線組件
CreditApproval 組件通過使用簡單的 SCA 客戶端 API 來與 CreditAgency 和 CreditHistory 進行交互。然而,要讓運行時正確地調用這些服務,需要將組件“連線”起來,使用 WebSphere Integration Developer 來進行這一操作非常簡單。在我們的示例中,我們將接受缺省值。
-
選擇 CreditAproval 組件并將其連線到 CreditAgency 組件(圖 13)。
圖 13. 連線組件
-
將顯示一個對話框(圖 14),表明將在 CreditApproval 組件上創建一個引用。選擇 OK。
圖 14. 匹配引用對話框
-
由于 CreditApproval 組件是一個 Java 組件,所以我們需要用 WebSphere Integration Developer 生成 Java 接口以便能夠調用該組件。因此,在下一個對話框(圖 15)中選擇 Yes。如果 CreditApproval 已經是一個完整的 BPEL 流程,則選擇 No。(請記住,在大多數情況下將使用 WSDL 作為集成層中的接口選擇。如果 User Interface 是與集成解決方案聯合部署的,則可以使用 Java 接口。)
圖 15. 生成 Java 接口對話框
-
重復步驟 9 到 11,將 CreditApproval 組件連線到 CreditHistory 組件。結果應該與圖 16 類似。
圖 16. 組件連線完成
單元測試組件
因為我們使用 Java 作為我們的實現,所以可以在 Java SE 環境中對組件進行單元測試。正如在第 1 部分所做的,我們很容易在 WebSphere Integration Developer 中調出單元測試工具:
-
右鍵單擊 CreditApproval 組件并選擇 Test Component(圖 17)。
圖 17. 測試組件
-
將顯示單元測試工具。該單元測試功能的一個很好的優點是它允許獨立測試組件,并且可以檢測引用和創建模擬器。在我們的例子中,我們自己測試集成,所以需要刪除模擬器。
-
切換到 Configurations 選項卡。
-
展開 Module CreditApproval 模塊,突出顯示 CreditAgency 和 CreditHistory,并將它們從 Emulators 列表中刪除(圖 18)。現在,測試 CreditApproval 組件將導致調用 CreditHistory 和 CreditAgency 組件,而不會模擬交互。
圖 18. 刪除模擬器
-
切換回 Events 選項卡并突出顯示 Invoke 項(圖 19)。
圖 19. Events 選項卡
-
填充輸入,如圖 20 所示。
圖 20. 數據參數
-
單擊 Continue。
-
選擇 Eclipse 1.4 JVM 選項(圖 21)。
圖 21. 選擇部署位置
-
檢查每個步驟的流程。您可以實際看到流經組件的數據(圖 22)。
圖 22. 事件流
-
最終結果應該與圖 23 類似。
圖 23. 測試結果
-
關閉測試編輯器,不進行保存。
檢查服務質量
引用和連線是集成解決方案的關鍵,因為它們抽象出調用的方式和場合。當在 WebSphere Process Server 中運行時,您可以定義想為調用設定的服務質量。例如,您可以使調用異步化、可以更改事務上下文,或者使異步調用更加可靠。這里我們將通過檢查引用屬性來查看各種 QoS 選項。
-
選擇 CreditApproval 組件上的 CreditAgency 引用,如圖 24 所示。
圖 24. 組件引用
-
轉到 Properties 視圖。您將注意到該引用被選中。
圖 25. 選中的引用
-
在 Details 選項卡上(圖 26),將顯示被調用的接口和多樣性,以及作為目標的連線。您可以更改調用的多樣性;對于異步調用,這樣可以以一種發布/訂閱方式調用幾個組件。
圖 26. 引用詳細信息
-
切換至 Qualifiers 選項卡(圖 27)以設置特定服務質量。
圖 27. Qualifiers 選項卡
-
單擊 Add 按鈕來查看幾個可用的服務質量(圖 28)。
圖 28. 服務質量限定符
-
作為自我練習,您可以試驗這些限定符,請記住,這些質量需要在 WebSphere Process Server 運行時中測試。這些限定符包括事務質量和異步質量;要測試事務工作,您需要與資源交互的組件。特定服務質量是在接口中定義的。這使得該組件能夠控制其他組件調用它的方式。
-
突出顯示 Assembly Editor 中的 CreditApproval 接口(圖 29),或者導航至 Properties 編輯器。
圖 29. Assembly Editor 中選定的 CreditApproval
-
檢查服務質量限定符(圖 30)和實現限定符。請注意,這些限定符是在被調用的服務(而不是調用它的服務)上定義的。
圖 30. 檢查限定符
在 WebSphere Process Server 測試環境中測試
要測試服務質量,您通常需要在 WebSphere Process Server 中運行,或者在 WebSphere Integration Developer 中為測試提供的 WebSphere Process Server 運行時運行。
-
在 Servers 視圖中,右鍵單擊該服務器并選擇 Start(圖 31)。
圖 31. 啟動測試環境中的服務器
圖 32. 服務器已啟動
-
當服務器啟動后,您可以按照管理控制臺中的指示(圖 32),以一種類似于添加 J2EE 應用程序的方式將該 SCA 模塊添加到服務器中,因為 SCA 模塊被包裝成 EAR 文件(如第 1 部分所提到的)。再次右鍵單擊服務器并選擇 Add and remove rojects...(圖 33)。
圖 33. 添加和刪除項目
-
選擇 CreditApprovalApp 并將它添加到已配置的項目一側(圖 34)。
圖 34. 將項目添加到服務器
-
檢查管理控制臺,確保 SCA 模塊已啟動(圖 35)。
圖 35. 表明 SCA 模塊已啟動的控制臺消息
-
要使用同一 WebSphere Integration Developer 單元測試功能來測試該組件,請按照前面所執行的操作,再次右鍵單擊該組件,然后選擇 Test Component(圖 36)。
圖 36. 測試 SCA 組件
-
再次說明,請刪除模擬器,以使測試能夠流經 SCA 組件(圖 37)。
圖 37. 刪除模擬器
-
鍵入輸入參數,如圖 38 所示。
圖 38. 數據參數
-
選擇 WebSphere Process Server V6.0 作為部署位置(圖 39)。
圖 39. 選擇部署位置
-
檢查測試結果。
作為自我練習,請更改組件以進行數據庫更新,然后試驗事務屬性。您也可以在管理控制臺中使調用異步化以及檢查基礎 Service Integration Bus 配置。
結束語
本文介紹了使用 WebSphere Integration Developer 組裝服務組件體系結構組件的上下文中的引用和連線。這一系列的下一篇文章將討論導入和導出,以便您能夠集成 SCA 模塊。該系列以后的文章還將介紹更復雜的組件以及與非 SCA 組件相集成。
致謝
作者真誠感謝 Eric Herness、Keys Botzum 和 Paul Ilechko 對本文的審閱。
下載
名字 |
大小 |
下載方法 |
CreditApprovalPart2.zip |
23 KB |
?FTP | HTTP |