• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 181, 文章 - 2, 評論 - 85, 引用 - 0
            數據加載中……

            6月1日-----IBM WebSphere 開發者技術期刊: 使用服務組件體系結構(SCA)構建 SOA 解決方案——第 1 部分

            引言

            您可能認為,這太棒了,又出現了一個編程模型,但事實并非如此。Web 服務怎么樣了?Enterprise JavaBeans 發生了什么?服務組件體系結構 (SCA) 并非要替換任何現有的編程模型或者與其抗衡。相反,SCA 向您提供一個以與技術無關的方式定義接口、實現和引用的模型,從而使您能夠將這些元素綁定到所選擇的某一技術的特定實現。

            例如,我們可以用 Java 定義我們的接口,將我們的實現作為 BPEL 流程加以應用,或者將接口作為一個 WSDL 文檔,而且我們的實現可以是一個 Java? 類。圖 1 演示了如何在 IBM WebSphere Process Server 中使用 SCA。


            圖 1. WebSphere Process Server 中的 SCA
            圖 1. WebSphere Process Server 中的 SCA

            使用 WebSphere Process Server,集成開發人員可以擁有各種不同的現成實現技術,并且可以采用開放標準(如通過 Java 或者 WSDL)來公開接口。此外,SCA 還提供了一個客戶機編程模型,通過該模型,客戶機可以訪問服務組件。這使得開發人員可以繼續使用他們熟悉的各種技術(如 Enterprise JavaBeans? (EJB))進行開發,并且使用 SCA 將這些組件連接在一起。

            SCA 的另一個主要部分是它還定義了一個標準模型,用于定義組件之間的依賴項。因此,通過使用引用連接 SCA 組件,可以定義依賴項。


            圖 2. 定義組件之間的依賴項
            圖 2. 定義組件之間的依賴項

            最后,SCA 定義了一個標準的部署模型,用于將組件打包到服務模塊。可以定義 SCA 組件以及與其相關聯的依賴項,并且將它們打包到部署單元。


            圖 3. 與依賴項一起打包的組件
            圖 3. 與依賴項一起打包的組件

            SCA 模塊并非只是另一種類型的包。在 WebSphere Process Server 中,SCA 服務模塊等同于一個 J2EE EAR 文件和許多其他 J2EE 子模塊。J2EE 元素(如 WAR 文件)可以與 SCA 模塊一起打包。非 SCA 構件(JSP 以及其他構件)也可以同 SCA 服務模塊打包在一起,這使得它們可以使用一種稱為獨立引用的特殊類型的引用,來通過 SCA 客戶機編程模型調用 SCA 服務。


            圖 4. 用于非 SCA 構件的獨立引用
            圖 4. 用于非 SCA 構件的獨立引用

            SCA 與集成有著緊密的聯系;我們將上述引用作為一種定義 SCA 組件之間的依賴項的方式進行了描述。例如,我們可以定義對同一個模塊內的另一個 SCA 組件的引用。當使用引用調用同一個模塊內的服務組件時,數據通過引用進行傳遞。SCA 定義了調用組件或其他 SCA 服務(位于其他 SCA 模塊內)的方式。

            用于模塊到模塊和模塊到外部服務調用的這兩種機制稱為導入導出

            導入和導出是從模塊的角度表述的。模塊是一組執行特定業務功能的自包含 (self-contained) 組件。

            當模塊需要向另一個實體(外部服務或其他模塊)提供功能來調用業務功能時,它將導出該功能。導出使得可以通過多種不同的傳輸協議來使用此服務。導出與模塊內的某個特定組件相關聯。

            當模塊需要利用另一個實體(外部服務或模塊)的功能時,模塊將導入該功能。導入還提供了通過多種傳輸協議與服務提供者交互的功能。

            圖 5 闡釋了這些概念。


            圖 5. SCA 導入和導出
            圖 5. SCA 導入和導出

            導入和導出是抽象概念。它們需要綁定到某一特定技術。WebSphere Process Server V6.0 中提供的綁定類型有:

            • SCA(用于 SCA 模塊到模塊)
            • Web 服務
            • JMS
            • 無狀態會話 Bean。

            當通過導入和導出調用 SCA 組件時,參數通過值進行傳遞。


            圖 6. SCA 導入和導出
            圖 6. SCA 導入和導出

            連接 SCA 組件的網絡將大部分基礎結構級別的代碼抽象出來。例如,我們可以將網絡定義為同步或異步,將操作定義為單向或請求-響應,我們也可以定義組件之間的事務行為。SCA 為您處理基礎結構方面的細節。我們將在這一系列文章中對這些細節進行更詳細的描述。

            導入和導出還可以綁定到其他技術,例如 JMS、Enterprise JavaBean 或者 Web 服務。這樣,Web 服務客戶機就可以調用 SCA 模塊,而 SCA 模塊就可以使用 SCA 編程模型調用現有的 Enterprise JavaBean。


            圖 7. 使用其他技術的導入和導出
            圖 7. 使用其他技術的導入和導出

            我們將在本系列的后續文章中討論導入和導出。

            數據方面的情況如何?

            SCA 向我們提供了一個用于定義業務服務的通用模型。服務數據對象 (SDO) 提供了一種用通用模型來表示數據的方法。可以將 SCA 組件組合在一起,并且通過傳遞 SDO 來以一種中立的方式相互交換數據。SDO 體系結構中的基本概念是數據對象,它是用于存放基元類型的數據和/或其他數據對象的數據結構。數據對象還存放對元數據的引用,元數據提供有關包含在數據對象中的數據的信息。

            在 SDO 編程模型中,數據對象是以 commonj.sdo.DataObject Java 接口定義表示的。該接口包含方法定義,通過方法定義,客戶機可以獲取和設置與數據對象相關聯的屬性。SDO 體系結構中的另一個重要概念是數據圖,它是封裝一組數據對象的結構。對于包含在數據圖中的頂層數據對象,可以從根數據對象開始遍歷引用來到達所有子數據對象。數據圖中的另一個重要功能是更改摘要,用于記錄關于在處理過程中已經更改的圖中的數據對象和屬性的信息。(有關 SDO 的詳細信息,請參閱參考資料。)

            WebSphere Process Server 通過業務對象實現 SDO 規范。SCA 組件可以通過傳遞業務對象來交換數據,如圖 8 所示。


            圖 8. WebSphere Process Server 業務對象
            圖 8. WebSphere Process Server 業務對象

            與 SDO 包裝在數據圖中一樣,業務圖用于包裝頂層業務對象,并且提供用來補充包含在圖中的數據的附加信息。具體來說,業務圖包括圖中數據的更改摘要(類似于 SDO 更改摘要信息)、事件摘要和謂詞信息(用于 EIS 系統之間的數據同步)。業務圖與 SDO 體系結構中的數據圖的概念非常相似。然而,新增信息的事件摘要和謂詞部分沒有包含在 SDO 數據圖概念中。







            SCA 101

            既然我們已經概括地介紹了 SCA,就可以通過一個示例來討論某些具體細節。在構建示例的過程中,我們將對 IBM WebSphere Integration Developer 進行概述,您可以使用該工具來以可見的方式構建和集成 SCA 組件。

            概述

            為了演示 SCA 和業務對象的各個方面,我們將討論與一個業務案例有關的這些概念。與所有開發工作一樣,開發周期必須從需求開始。該場景中的需求包括創建信用審批服務,該服務將接收關于申請者 (CreditApplication) 的信息,并通過信用等級 (CreditRating) 進行響應。

            SCA 中最簡單的部分是服務組件。如前所述,服務組件是由一個接口和一個實現構成的。用來“編碼”這些構件的技術可以有所不同;在 WebSphere Process Server 中,接口可以是 Java 或者 WSDL。Java 接口可以是 Plain Old Java Interface (POJI),如下所示:


            清單 1
            												
            																		
            public interface CreditRequest
            {
            
            	public DataObject calulateCreditScore(DataObject creditApp)
            			throws ServiceBusinessException;
            
            }
            												
            										

            如果您使用 Java 實現,則可以創建一個簡單的 POJO。下面是一個用作 SCA 實現的 POJO 的示例:


            清單 2
            												
            																		
            public class CreditApprovalImpl implements CreditRequest {
            	
            	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"));
            		
            		creditRating.setInt("creditScore", 750);
            		creditRating.setDouble("creditLimit", 10000d);
            				
            		return creditRating;
            	}
            
            }
            												
            										

            在這個實現類中,我們使用 CreditApplication 輸入創建一個簡單的 CreditRating 業務對象,然后我們將該業務對象返回到調用程序。

            服務組件是在服務組件定義語言(Service Component Definition Language,SCDL)文件中定義的。使用 SCDL 創建的組件文件與 EJB 部署描述符有些類似,這是因為它定義了接口、實現和 SCA 組件的多個服務質量需求。上述 Java 類的 SCDL 文件如下所示:


            清單 3
            												
            																		
            <?xml version="1.0" encoding="UTF-8"?>
            <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="java:JavaInterface" interface="CreditRequest " >
                  <method name="calulateCreditScore"/>
                </interface>
              </interfaces>
              <implementation xsi:type="java:JavaImplementation" class=" CreditApprovalImpl"/>
            </scdl:component>
            												
            										

            類似地,我們可以使用 WSDL 表示接口,如下所示:


            清單 4
            												
            																		
            <?xml version="1.0" encoding="UTF-8"?>
            <wsdl:definitions xmlns:bons1="http://CreditApproval" 
            xmlns:tns="http://CreditApproval/CreditRequest" 
            xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="CreditRequest" 
            targetNamespace="http://CreditApproval/CreditRequest">
              <wsdl:types>
                <xsd:schema targetNamespace="http://CreditApproval/CreditRequest" 
            	xmlns:bons1="http://CreditApproval" 
            	xmlns:tns="http://CreditApproval/CreditRequest" 
            	xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                  <xsd:import namespace="http://CreditApproval" 
            schemaLocation="xsd-includes/http.CreditApproval.xsd"/>
                  <xsd:element name="calulateCreditScore">
                    <xsd:complexType>
                      <xsd:sequence>
                        <xsd:element name="CreditApp" nillable="true" 
            type="bons1:CreditApp"/>
                      </xsd:sequence>
                    </xsd:complexType>
                  </xsd:element>
                  <xsd:element name="calulateCreditScoreResponse">
                    <xsd:complexType>
                      <xsd:sequence>
                        <xsd:element name="CreditRating" nillable="true" 
            type="bons1:CreditRating"/>
                      </xsd:sequence>
                    </xsd:complexType>
                  </xsd:element>
                </xsd:schema>
              </wsdl:types>
                <wsdl:message name="calulateCreditScoreRequestMsg">
                <wsdl:part element="tns:calulateCreditScore" 
            name="calulateCreditScoreParameters"/>
              </wsdl:message>
                <wsdl:message name="calulateCreditScoreResponseMsg">
                <wsdl:part element="tns:calulateCreditScoreResponse" 
            name="calulateCreditScoreResult"/>
              </wsdl:message>
                <wsdl:portType name="CreditRequest">
                <wsdl:operation name="calulateCreditScore">
                  <wsdl:input message="tns:calulateCreditScoreRequestMsg" 
            name="calulateCreditScoreRequest"/>
                  <wsdl:output message="tns:calulateCreditScoreResponseMsg" 
            name="calulateCreditScoreResponse"/>
                </wsdl:operation>
              </wsdl:portType>
            </wsdl:definitions>
            												
            										

            實現類可能與之相同(唯一不同的是,它顯然沒有實現任何 Java 接口,因為它定義為 WSDL)。

            我們的 SCDL 文件可以將接口綁定到 WSDL 文檔:


            清單 5
            												
            																		
            <?xml version="1.0" encoding="UTF-8"?>
            <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>
              <implementation xsi:type="java:JavaImplementation" class="CreditApprovalImpl"/>
            </scdl:component>
            												
            										

            SCDL 用于描述 SCA 的組成部分,如模塊、引用、導入和導出。您將在本系列中看到它們的示例。SCDL 定義是由多個文件組成的。例如,我們將接口和實現的 SCDL 存儲在一個名為 CreditApproval.component 的文件中。引用可以包含在 CreditApproval.component 文件(內聯)中,也可以包含在 Module 根目錄下的一個單獨的 sca.references 文件中。所有獨立引用都將放置在 sca.references 文件中,如下所示。如前所述,同一個 SCA 模塊內的非 SCA 構件 (JSP) 可以使用獨立引用調用 SCA 組件。


            清單 6
            												
            																		
            <?xml version="1.0" encoding="UTF-8"?>
            <scdl:references xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xmlns:java="http://www.ibm.com/xmlns/prod/websphere/scdl/java/6.0.0" 
            xmlns:scdl="http://www.ibm.com/xmlns/prod/websphere/scdl/6.0.0">
              <reference name="CreditRequestPartner">
                <interface xsi:type="java:JavaInterface" interface="approval.credit.credit.request.CreditRequest">
                  <method name="calulateCreditScore"/>
                </interface>
                <wire target="CreditApproval"/>
              </reference>
            </scdl:references>
            												
            										

            在我們的示例中,我們將定義的第三個文件是 sca.module。該 SCDL 文件包含模塊的定義:


            清單 7
            												
            																		
            <?xml version="1.0" encoding="UTF-8"?>
            <scdl:module xmlns:scdl="http://www.ibm.com/xmlns/prod/websphere/scdl/6.0.0" name="CreditApproval"/>
            												
            										

            雖然我們為組件定義了一個 WSDL 接口,但是請注意,我們能夠將另一個 Java 接口添加到獨立引用,并將其連接到我們的目標組件。通過這種方式,Java 客戶機可以使用一個簡單的 POJI 調用 SCA 組件。WebSphere Integration Developer 將提供在 Java 接口和 WSDL 接口之間轉換調用的選項。在創建了第一個 SCA 組件后,您將很快看到這樣一個示例。

            在這一系列文章中,我們將看到 SCDL 如何定義其他 SCA 構件(如服務引用、導入和導出)的示例。WebSphere Integration Developer 使用上述 SCDL 文件的命名約定,實際情況就是如此。在我們的示例中,在構建第一個 SCA 組件時,您將使用 WebSphere Integration Developer。然而,SCA 應用程序也可以使用記事本進行構建。

            WebSphere Integration Developer 和 WebSphere Process Server

            在本文中,您將使用 WebSphere Integration Developer 和 WebSphere Process Server 來構建并運行 SCA 組件。

            WebSphere Integration Developer 用于開發運行于 WebSphere Process Server V6 上的應用程序。WebSphere Integration Developer 基于 Eclipse 3.0 平臺,它為集成項目提供了基于角色的開發。您可以將 WebSphere Integration Developer 和 IBM WebSphere Business Modeler V6 與 IBM Rational? Application Developer V6 或 IBM Rational Software Architect V6 一起作為集成開發平臺。J2EE 開發人員、業務分析人員或集成開發人員可以使用基于其獨特角色的工具透視圖,這樣每個開發人員都可以將注意力集中在這些角色所需的編輯器和工具上,從而大大提高了工作效率。

            WebSphere Process Server 是一個基于 WebSphere Application Server V6 的綜合集成平臺。WebSphere Process Server 用于在面向服務的體系結構中執行基于組件的業務集成應用程序。由于它基于 WebSphere Application Server 提供的 J2EE 1.4 基礎結構和平臺服務,因此 WebSphere Process Server 包括諸如業務流程自動化之類的功能。

            有關 WebSphere Integration Developer 和 WebSphere Process Server 的詳細信息,請參閱參考資料







            構建第一個 SCA 項目

            現在,您可以構建第一個 SCA 項目了。在本例中,您將構建一個簡單的信用審批組件。該組件接收一個具有 ID 和名稱的數據對象,然后返回另一個包含信用分數和信用額度的數據對象。下載本文所附的 zip 文件,并將其解壓縮到硬盤上。本指導假設您將 zip 文件解壓縮到 C: 盤上。

            WebSphere Integration Developer V6.0 是一個靈活的開發環境,它為自底向上或自頂向下開發 SCA 應用程序提供了工具和向導。

            為了創建信用審批服務,我們將研究自頂向下開發的各個方面。自頂向下開發過程的一般步驟大致如下:

            1. 創建 SCA 模塊。
            2. 創建業務對象。
            3. 定義服務接口。
            4. 生成組件并提供實現。
            5. 對 SCA 組件進行單元測試。
            6. 提供獨立引用。
            7. 使用簡單的 JSP 客戶機測試服務。

            創建 SCA 模塊

            首先,您需要創建一個 SCA 模塊。如前所述,SCA 模塊是 SCA 組件的打包構造。

            1. 在 WebSphere Integration Developer 中打開一個空白工作區。(圖 9)


              圖 9. 在 WebSphere Integration Developer 中打開一個空白工作區
              圖 9. 在 WebSphere Integration Developer 中打開一個空白工作區
            2. 關閉 Welcome 屏幕。

            3. 接下來,您需要創建一個新模塊。

              1. 在 WebSphere Integration Developer 工作臺中,打開業務集成透視圖。找到 Business Integration 視圖。

              2. 在 Business Integration 視圖內單擊鼠標右鍵,然后選擇 New => Module。(圖 10)


                圖 10. 創建新模塊
                圖 10. 創建新模塊
              3. New Module 向導應該出現(圖 11)。將該模塊命名為 CreditApprovalSCAModule


                圖 11. 創建新模塊
                圖 11. 創建新模塊
              4. 現在,Business Integration 視圖中應該顯示一個新項目。SCA 模塊是作為 SCDL 文件描述的。Business Integration 視圖向您展示了 SCA 模塊的邏輯視圖。如前所述,您可以打開 Physical Resource 視圖,來查看包含在 SCA 模塊中的物理資源。SCA 模塊的 SCDL 包含在名為 sca.module 的文件中。如果您使用文本編輯器打開該文件,應該看到以下內容:


            清單 8
            												
            																		
            <?xml version="1.0" encoding="UTF-8"?>
            <scdl:module xmlns:scdl="http://www.ibm.com/xmlns/prod/websphere/scdl/6.0.0" name="CreditApprovalSCAModule"/>
            
            												
            										

            創建業務對象

            對于創建接口或業務對象,沒有預先定義的任務順序;只需要在創建接口時簡單地創建業務對象即可。這里我們選擇在 Business Integration 視圖中創建業務對象。

            在創建業務對象時,實際上您正在創建 XML 模式。業務對象作為標準的 XML 模式進行存儲。應用程序可以使用 SDO 編程模型和 XPath 訪問數據。

            通過業務對象編輯器,我們可以創建信用審批服務將使用的業務對象定義。我們的服務需要兩個業務對象。

            CreditApplication:包含計算信用等級所需的信用申請者的有關信息。信用應用程序業務對象 (CreditApplication) 包含三個屬性:

            • Customer Id:客戶的唯一標識符
            • First Name:客戶的名字
            • Last Name:客戶的姓氏

            CreditRating:包含信用等級信息,如信用分數和信用額度。信用等級業務對象 (CreditRating) 包含三個屬性:

            • Credit Score:客戶基于先前歷史記錄的信用分數
            • Credit Limit:客戶可借貸的總金額。

            1. 我們首先創建請求業務對象,它用作 SCA 組件的輸入參數。

              1. 請確保 CreditApprovalSCAModule 已展開。右鍵單擊 Data Types,然后選擇 New => Business Object。(圖 12)


                圖 12. 創建新業務對象
                圖 12. 創建新業務對象
              2. 將業務對象命名為 CreditApplication,如圖 13 所示。


                圖 13. 定義業務對象
                圖 13. 定義業務對象
              3. 該業務對象應該在業務對象編輯器中打開。現在,Data Types 菜單下應該有 CreditApplication。(圖 14)


                圖 14. 業務集成菜單
                圖 14. 業務集成菜單
            2. 現在,我們將定義 CreditApplication 業務對象的屬性。

              1. 您可以通過選擇 Add Attribute 圖標添加屬性,如圖 15 所示。


                圖 15. Add Attribute 圖標
                圖 15. Add Attribute 圖標
              2. 輸入 customerId 作為屬性名稱,并接受缺省的 String 類型。(要更改類型,您只需選擇類型字段,并從下拉框中選擇類型。您需要為響應對象進行此操作。)


                圖 16. 定義屬性
                圖 16. 定義屬性
              3. 再添加兩個 String 屬性,并將其命名為 firstNamelastName。這兩個屬性應該是字符串類型,如下所示。


                圖 17. 定義屬性
                圖 17. 定義屬性
              4. 該業務對象是使用標準的 XML 模式類型定義的。您可以使用 XML 編輯器打開該業務對象,以便進行查看。(通過右鍵單擊業務對象并選擇 Open with => 和您選擇的編輯器,您可以在文本編輯器中打開該業務對象。)

              5. 保存并關閉業務對象編輯器。


                圖 18. 定義的業務對象
                圖 18. 定義的業務對象
              6. XML 模式應該類似于下面的代碼示例。


                清單 9
                																				
                																														
                <?xml version="1.0" encoding="UTF-8"?>
                <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                targetNamespace="http://CreditApprovalSCAModule">
                  <xsd:complexType name="CreditApplication">
                    <xsd:sequence>
                      <xsd:element minOccurs="0" name="customerId" type="xsd:string"/>
                      <xsd:element minOccurs="0" name="firstName" type="xsd:string"/>
                      <xsd:element minOccurs="0" name="lastName" type="xsd:string"/>
                    </xsd:sequence>
                  </xsd:complexType>
                </xsd:schema>
                																				
                																		

            3. 現在,我們要創建第二個業務對象來表示響應。

              1. 按照上面同樣的步驟,創建另一個業務對象。該業務對象有三個字段:

                • 字符串類型的 customerId
                • 整數類型的 creditScore
                • 雙精度類型的 creditLimit
              2. 如前所述,您可以通過選擇類型列更改類型,如圖 19 所示。


                圖 19. 更改屬性類型
                圖 19. 更改屬性類型
              3. 保存并關閉業務對象編輯器

            現在,您已經創建了兩個業務對象。

            定義服務接口

            現在,您可以創建 SCA 接口了。此外,信用審批服務是一個請求-響應服務,它接收信用應用程序并同時返回信用等級。服務接口定義服務客戶機和服務提供者之間的交互。

            有多種創建接口的方式。如果您選擇 Java 接口,可以使用 WebSphere Integration Developer 中的 Java Eclipse 工具來進行創建。在我們的示例中,我們將在業務集成透視圖中創建 WSDL 接口。您可以使用 Assembly Editor 創建,也可以使用業務集成視圖創建。我們將使用后者。(稍后,我們將使用 Assembly Editor 創建實現。)

            1. 首先,我們將使用 Business Integration 視圖菜單創建接口。

              1. 右鍵單擊 Interfaces 菜單項,然后選擇 New => Interfaces,如圖 20 所示。


                圖 20. 創建新接口
                圖 20. 創建新接口
              2. 在 New Interface 菜單中,輸入名稱 CreditApproval。(請記住出于演示的目的,在我們的示例中,我們使用的是缺省包和文件夾。您可以選擇一個文件夾,輕松地按功能對不同的接口進行分組。)


                圖 21. 創建新接口
                圖 21. 創建新接口
            2. CreditApproval 接口是一個簡單的 WSDL 文件。WebSphere Integration Developer 附帶了一個簡單的 WSDL 編輯器,可以用來構建接口。

              1. 在創建接口時,接口編輯器應該已經打開。如果接口編輯器尚未打開,可以在業務集成視圖中雙擊接口,以將接口編輯器打開。

              2. 首先,我們要創建一個簡單的請求-響應操作。(您還可以創建用于異步調用的單向操作,但是現在,我們只創建簡單的同步請求。)單擊 Add Request Response Operation 圖標,如圖 22 所示。


                圖 22. Add Request Response Operation 圖標
                圖 22. Add Request Response Operation 圖標
              3. 將在編輯器中創建一個操作。將該操作命名為 calculateCreditRating。(圖 23)


                圖 23. 定義操作
                圖 23. 定義操作
              4. 現在我們需要定義參數。請記住,我們創建了兩個業務對象,一個用于輸入,另一個用于輸出。在創建操作后,選擇 Add Input 圖標,如圖 24 所示。


                圖 24. Add Input 圖標
                圖 24. Add Input 圖標
              5. 將輸入命名為 CreditApplication

              6. 選擇 Type 列并找到 CreditApplicaiton 業務對象。您可以看到,業務對象現在是一個有效類型,可以用于構建接口,如圖 25 所示。(在這里你可以選擇創建新業務對象。)


                圖 25. 新業務對象現在是一個有效類型
                圖 25. 新業務對象現在是一個有效類型
              7. 接下來,選擇 Add Output 圖標,如圖 26 所示。


                圖 26. Add Output 圖標
                圖 26. Add Output 圖標
              8. 選擇 CreditRating 作為類型,類似于選擇輸入的類型。


                圖 27. 定義輸出
                圖 27. 定義輸出
              9. 保存并關閉接口編輯器。

              10. 如果您希望檢查 WSDL 文件,可以在 Physical Resources 視圖中右鍵單擊 CreditApproval.wsdl 文件,然后使用文本編輯器打開該文件。(圖 28)


                圖 28. 查看 WSDL 文件
                圖 28. 查看 WSDL 文件

                WSDL 文件應該類似于下面的代碼示例。


                清單 10
                																				
                																														
                <?xml version="1.0" encoding="UTF-8"?>
                <wsdl:definitions xmlns:bons1="http://CreditApprovalSCAModule" 
                xmlns:tns="http://CreditApprovalSCAModule/CreditApproval" 
                xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                name="CreditApproval" targetNamespace="http://CreditApprovalSCAModule/CreditApproval">
                  <wsdl:types>
                    <xsd:schema targetNamespace="http://CreditApprovalSCAModule/CreditApproval" 
                xmlns:bons1="http://CreditApprovalSCAModule" 
                xmlns:tns="http://CreditApprovalSCAModule/CreditApproval" 
                xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                      <xsd:import namespace="http://CreditApprovalSCAModule" 
                schemaLocation="xsd-includes/http.CreditApprovalSCAModule.xsd"/>
                      <xsd:element name="calculateCreditRating">
                        <xsd:complexType>
                          <xsd:sequence>
                            <xsd:element name="CreditApplication" nillable="true" 
                type="bons1:CreditApplication"/>
                          </xsd:sequence>
                        </xsd:complexType>
                      </xsd:element>
                      <xsd:element name="calculateCreditRatingResponse">
                        <xsd:complexType>
                          <xsd:sequence>
                            <xsd:element name="CreditRating" nillable="true" 
                type="bons1:CreditRating"/>
                          </xsd:sequence>
                        </xsd:complexType>
                      </xsd:element>
                    </xsd:schema>
                  </wsdl:types>
                    <wsdl:message name="calculateCreditRatingRequestMsg">
                    <wsdl:part element="tns:calculateCreditRating" 
                name="calculateCreditRatingParameters"/>
                  </wsdl:message>
                    <wsdl:message name="calculateCreditRatingResponseMsg">
                    <wsdl:part element="tns:calculateCreditRatingResponse" 
                name="calculateCreditRatingResult"/>
                  </wsdl:message>
                    <wsdl:portType name="CreditApproval">
                    <wsdl:operation name="calculateCreditRating">
                      <wsdl:input message="tns:calculateCreditRatingRequestMsg" 
                name="calculateCreditRatingRequest"/>
                      <wsdl:output message="tns:calculateCreditRatingResponseMsg" 
                name="calculateCreditRatingResponse"/>
                    </wsdl:operation>
                  </wsdl:portType>
                </wsdl:definitions>
                
                																				
                																		

            生成組件并提供實現

            現在,我們可以創建 SCA 實現了。此時,我們已經創建了標準的接口和業務對象。現在我們要定義 SCA 組件。您將使用 SCA Assembly Editor 來完成此操作。

            1. 首先,我們要定義 SCA 組件。

              1. 通過雙擊 CreditApprovalSCAModule 菜單項,打開 SCA Assembly Editor,如圖 29 所示。


                圖 29. 打開 SCA Assembly Editor
                圖 29. 打開 SCA Assembly Editor
              2. SCA Assembly Editor 有一個面板,可以用于創建 SCA 構件。您也可以從各種視圖中拖動某些構件。只需將 CreditApproval 接口拖至 Assembly Editor,如圖 30 所示。(或者,您也可以從面板拖動 Java 組件,然后將其與接口相關聯。)


                圖 30. 將接口拖至 Assembly Editor
                圖 30. 將接口拖至 Assembly Editor
              3. 將出現一個文本框。選擇 Component with No Implementation Type,如圖 31 所示。


                圖 31. 組件創建文本框
                圖 31. 組件創建文本框
              4. 現在,您應該在 Assembly Editor 上看到一個名為 Component1 的 SCA 組件。(圖 32)


                圖 32. SCA 組件圖標
                圖 32. SCA 組件圖標
              5. 通過選擇組件并鍵入名稱,您可以更改名稱;或者可以使用屬性編輯器更改名稱,如圖 33 所示。將顯示名稱更改為 CreditApproval。名稱字段應該自動更改。


                圖 33. 更改組件名稱
                圖 33. 更改組件名稱
            2. 現在,我們的 SCA 組件具有接口,但沒有實現。現在我們要使用 Assembly Editor 生成實現。

              1. 通過在 Assembly Editor 中右鍵單擊組件并選擇 Generate Implementation => Java,生成一個框架實現。(圖 34)


                圖 34. 生成框架實現
                圖 34. 生成框架實現
              2. 新 Java 實現應該在 Java 編輯器中打開;您將看到 calculateCreditRating。下載文件中提供了簡單的代碼段,位置為 C:\SCA_ArticleSeries\Part1\CodeSnippet1.txt。方法如下所示。


                清單 11
                																				
                																														
                public DataObject calculateCreditRating(DataObject creditApplication) {
                //	Create and return a credit rating object.
                	System.out.println("********* credit approval service invoked ******");
                	ServiceManager serviceManager = new ServiceManager();
                
                	BOFactory bof = (BOFactory)serviceManager.locateService("com/ibm/websphere/bo/BOFactory");
                
                	System.out.println("********* BOFactory created ******");
                	DataObject creditRating = bof.create("http://CreditApproval", "CreditRating");
                
                	System.out.println("********* credit rating object created ******");
                	creditRating.setString("customerId", creditApplication.getString("customerId"));
                		
                	creditRating.setInt("creditScore", 750);
                	creditRating.setDouble("creditLimit", 10000d);
                	System.out.println("********* returning credit rating object ******");
                		
                	return creditRating;
                
                }
                																				
                																		

            3. 這些代碼使用 SCA 服務管理器查找業務對象工廠 (Business Object Factory),后者用于從 XML 模式中創建業務對象。出于演示的目的,我們創建響應數據對象,并返回硬編碼的數據。

            4. 如果您粘貼代碼,則可能出現一些編譯錯誤。通過右鍵單擊編輯器并選擇 Source => Organize Imports,您可以更正這些錯誤,如圖 35 所示。


              圖 35. 更正錯誤
              圖 35. 更正錯誤
            5. 保存并關閉 Java 文件,但是 Assembly Editor 保持打開狀態。

            對 SCA 組件進行單元測試

            WebSphere Integration Developer 提供了使用單元測試工具對組件進行單元測試的功能。根據 SCA 實現的類型,您可以在 J2SE 環境中測試 SCA 組件,通過該環境,可以在沒有完整的應用程序服務器的情況下測試組件;當然,這在很大程度上取決于您具有的組件的類型。可以在 J2SE 環境中輕松地對 Java 實現進行測試,但是由 BPEL 流程實現的 SCA 組件需要 BPEL 引擎(如 WebSphere Process Server)。在我們的示例中,我們將使用測試組件功能來測試 SCA 組件。

            要啟動測試組件功能,請執行以下步驟:

            1. 在 SCA Assembly Editor 中右鍵單擊 CreditApproval 組件,然后選擇 Test Component。(圖 36)


              圖 36. 啟動測試組件功能
              圖 36. 啟動測試組件功能
            2. 這將啟動測試組件編輯器。在該工具的右側,輸入測試數據,如圖 37 所示,然后單擊 Continue


              圖 37. 輸入測試數據
              圖 37. 輸入測試數據
            3. 將顯示可用的運行時列表。選擇 Eclipse 1.4 JVM,然后單擊 Finish。(圖 38)


              圖 38. 運行時部署位置
              圖 38. 運行時部署位置
            4. 要開始測試,請選擇 Return 項,如圖 39 所示。監視 Events 窗口以查看流程。


              圖 39. Events 窗口
              圖 39. Events 窗口
            5. 您將在右側看到結果。(圖 40)


              圖 40. 單元測試結果
              圖 40. 單元測試結果

            創建 SCA 客戶機 Web 應用程序并在 WebSphere Process Server 中進行測試

            1. 要讓打包在同一 SCA 部署中的非 SCA 組件調用 SCA 組件,我們需要創建獨立引用:

              1. 在 SCA Assembly Editor 中,請選擇面板中 Import 圖標旁邊的 arrow。這將打開一個更小的子菜單。選擇 Standalone references 圖標,并將其拖至 Assembly Editor 中的任何位置,如圖 41 所示。


                圖 41. 創建獨立引用
                圖 41. 創建獨立引用
              2. 單擊 Stand-alone References 框的內部(而非文本),并將其拖至 Credit Approval 組件,如圖 42 所示。


                圖 42. 創建匹配引用
                圖 42. 創建匹配引用
              3. 單擊 OK,創建匹配引用。(圖 43)


                圖 43. 創建匹配引用
                圖 43. 創建匹配引用
              4. 下一文本框將向您提供生成 Java 接口的選項。請記住,您創建了 WSDL 接口。然而,WebSphere Integration Developer 要生成等效的 Java 接口,以使 Java 客戶機使用 SCA API 交互。選擇 Yes。(圖 44)


                圖 44. 接口轉換驗證
                圖 44. 接口轉換驗證
            2. 有了獨立引用后,現在我們可以在同一模塊的非 SCA 組件中調用 SCA 組件。請記住,SCA 模塊是由 EAR 文件實現的,因此您可以將其他 J2EE 組件添加到 SCA 模塊。在我們的示例中,我們要導入具有 JSP 文件的現有 WAR 文件。WAR 文件將是基礎 EAR 文件的一部分。

              1. 選擇 File => Import,調出 Import 向導。選擇 WAR file,然后單擊 Next。(圖 45)


                圖 45. 從非 SCA 組件中調用 SCA 組件
                圖 45. 從非 SCA 組件中調用 SCA 組件
              2. 選擇 C:\SCA_ArticleSeries\Part1\CreditApprovalClient.war。取消選擇 Add module to an EAR Project


                圖 46. 導入 WAR 文件
                圖 46. 導入 WAR 文件
              3. 選擇 Yes,以轉到 Web 透視圖。(圖 47)


                圖 47. 轉到 Web 透視圖
                圖 47. 轉到 Web 透視圖
              4. 打開 JSP 文件,以檢查代碼。您將在 Dynamic Web Projects 目錄下找到該文件,如圖 48 所示。JSP 稱為 creditApprovalClient.jsp。


                圖 48. Dynamic Web Projects 目錄
                圖 48. Dynamic Web Projects 目錄
              5. 我們使用簡單的 JSP 接收輸入并使用 SCA API 調用 SCA 組件。(請記住,為了使用 MVC,該 JSP 遵循最佳實踐)。

            3. SCA 具有 Dependency Editor,通過該編輯器,可以將不同的包添加到 SCA 模塊:

              1. 通過右鍵單擊 CreditApprovalSCAModule 并選擇 Open Dependency Editor,打開 Dependency Editor。(圖 49)


                圖 49. 打開 Dependency Editor
                圖 49. 打開 Dependency Editor
              2. 展開 J2EE 部分,然后單擊 Add 按鈕。(圖 50)


                圖 50. 配置依賴項
                圖 50. 配置依賴項
              3. 選擇 CreditApprovalClient Web 項目,如圖 51 所示。


                圖 51. 選擇 Web 項目
                圖 51. 選擇 Web 項目
              4. 請確保未選中 On Build Path。(Build Path 將該組件添加到 SCA 模塊的類路徑。在我們的示例中,我們需要使 WAR 文件依賴于 SCA 模塊。)保存 Dependency Editor。這使得 WAR 文件成為 EAR 文件的一部分。


                圖 52. 設置依賴項
                圖 52. 設置依賴項
              5. 要讓 Web 項目知道 SCA Java 接口,可以右鍵單擊 Web 項目并選擇 Properties

              6. 轉到 Java JAR Dependencies 并選擇 CreditApprovalSCAModuleEJBClient.jar,它是在下面生成的 EJB 客戶機 JAR 文件。(圖 53)


                圖 53. 設置依賴項
                圖 53. 設置依賴項
              7. 關閉編輯器。此時,您可以選擇執行整體構建。這可能沒有必要,但我們總是喜歡在部署前進行整體構建。如果您有自動構建,可以進行清理,如圖 54 所示。


                圖 54. 用于自動構建的清理
                圖 54. 用于自動構建的清理
            4. 現在,我們可以在 WebSphere Process Server 上部署并測試我們的 SCA 組件和 Web 客戶機了。請記住,我們的 SCA 模塊是由 J2EE 應用程序實現的。您可以轉到 J2EE 透視圖來查看構件。請記住,它們是生成的構件。(我們以后將在這一系列文章中進行介紹。)


              圖 55. J2EE 透視圖
              圖 55. J2EE 透視圖
              1. 轉到 Business Integration 透視圖底部的 Servers 視圖。右鍵單擊 WebSphere Process Server,然后選擇 Start,如圖 56 所示。


                圖 56. 啟動 WebSphere Process Server
                圖 56. 啟動 WebSphere Process Server
              2. 等待服務器啟動。檢查控制臺并等待圖 57 中所示的消息。


                圖 57. WebSphere Process Server 啟動消息
                圖 57. WebSphere Process Server 啟動消息
              3. 再次右鍵單擊服務器并選擇 Add and remove projects。(圖 58)


                圖 58. 添加和刪除項目
                圖 58. 添加和刪除項目
              4. 選擇 CreditApprovalSCAModuleAdd,然后選擇 Add,如圖 59 所示。這會將其移到右側的 Configured projects 框中。


                圖 59. 在服務器上配置項目
                圖 59. 在服務器配置項目
              5. 監視右下角的進度,等待部署應用程序。(圖 60)


                圖 60. 項目部署監視器
                圖 60. 項目部署監視器
              6. 在控制臺驗證 CreditApporvalSCAModuleApp 已經啟動。(圖 61)


                圖 61. 管理控制臺消息
                圖 61. 管理控制臺消息
              7. 轉到 Web 透視圖。右鍵單擊 JSP,然后選擇 Run => Run on Server,如圖 62 所示。


                圖 62. 運行應用程序
                圖 62. 運行應用程序
              8. 選擇現有的 WebSphere Process Server,接著選擇 Set server as project default,然后單擊 Finish。(圖 63)


                圖 63. 設置服務器
                圖 63. 設置服務器
              9. 當應用程序執行時,輸入圖 64 中所示的應用程序測試數據。


                圖 64. 輸入 SCA 應用程序測試數據
                圖 64. 輸入 SCA 應用程序測試數據
              10. 您應該獲得圖 65 所示的結果。


                圖 65. SCA 應用程序測試結果
                圖 65. SCA 應用程序測試結果
              11. 關閉瀏覽器并停止服務器。

            祝賀您!您已經創建并測試了第一個 SCA 組件!







            結束語

            服務組件體系結構 (SCA) 是面向服務的體系結構 (SOA) 中的一個主要變化。SCA 向我們提供了 SOA 的編程模型,并將在今后作為集成的基礎。請繼續關注本系列的后續文章,我們將研究特定 SCA 功能的細節以及它們可給您的應用程序帶來的好處。

            posted on 2006-06-01 17:00 wsdfsdf 閱讀(406) 評論(0)  編輯 收藏 引用 所屬分類: 技術文章

            国产成人精品久久一区二区三区av| 久久久久青草线蕉综合超碰| 狠狠干狠狠久久| 亚洲精品高清久久| 久久婷婷国产剧情内射白浆| 久久久久久午夜成人影院| 2021久久精品国产99国产精品| 久久精品国产免费| 国内精品伊人久久久久777| 久久精品国产91久久综合麻豆自制| 久久露脸国产精品| 999久久久无码国产精品| 日韩AV毛片精品久久久| 精品永久久福利一区二区| 亚洲色欲久久久久综合网 | 午夜精品久久久久成人| 久久精品中文闷骚内射| 国产精品免费久久| 久久天天躁狠狠躁夜夜躁2O2O| 免费一级做a爰片久久毛片潮| 久久香综合精品久久伊人| 亚洲第一永久AV网站久久精品男人的天堂AV | 精品视频久久久久| 99久久精品国产高清一区二区| 久久天天躁狠狠躁夜夜不卡| 久久er国产精品免费观看8| 国产精品久久久久久| 久久久久亚洲AV片无码下载蜜桃| 2021国内久久精品| 伊人久久大香线蕉AV一区二区| 久久se精品一区二区影院| 久久精品国产精品国产精品污 | 国产成人精品三上悠亚久久| 欧美精品一区二区久久| 久久久久国产视频电影| 久久精品国产国产精品四凭| 草草久久久无码国产专区| 免费观看成人久久网免费观看| 久久精品九九亚洲精品| 69SEX久久精品国产麻豆| 国产欧美久久一区二区|