人人IT網

人人IT網

當前位置: 主頁 > 服務器軟件 > Websphere >

在 IBM Business Process Manager V7.5 中集成 WebSphere Adapter for JDBC 的分頁查詢功能

時間:2012-12-04 00:04來源:Internet 作者:Internet 點擊:
簡介 WebSphere Adapter for JDBC(後面簡稱为 JDBC Adapter)是 IBM Business Process Manager V7.5 (IBM BPM) 提供

簡介

WebSphere Adapter for JDBC(後面簡稱为 JDBC Adapter)是 IBM Business Process Manager V7.5 (IBM BPM) 提供的一個功能強大的數據庫資源适配器。運行在 IBM BPM 上的應用程序可以通過 JDBC Adapter 實現與任意數據庫的雙向通信。具體來說,它使 J2EE 項目和面向服務架構(SOA)項目能夠以業務對象的形式與 IBM BPM 交換數據。

數據庫查詢是 JDBC Adapter 的基本功能之一。實際上,在處理大型數據集時可能會遇到性能下降問題。根據不同的數據庫產品,人們開發了大量分頁查詢技術來提高數據庫查詢操作的效率。一個常見的做法是對結果集進行分頁,然後以可管理的大小返回查詢結果。從 Version 7.5 開始,JDBC Adapter 为分頁查詢提供了一個內置功能,允許您更有效地處理大型數據集。本文將介紹一個業務流程解决方案,幫助您在 IBM BPM 中使用分頁查詢功能。

要完成本文中的步驟,您需要具備以下產品:

  • IBM WebSphere Adapter for JDBC V7.5
  • IBM Business Process Manager V7.5
  • IBM Integration Designer V7.5

WebSphere Adapter for JDBC 的分頁查詢功能

在這一小節中,我們將通過一個使用 JDBC Adapter 的样例業務場景介紹分頁查詢的一種實用應用。

样例業務場景

为了維護账單信息,開發人員在 DB2® 數據庫中創建了一個表。如清單 1 所示,該表共有四列,用於保存各種账單明細。


清單 1. 账單信息表
				
CREATE TABLE Bill
(
	ID         INTEGER NOT NULL PRIMARY KEY,
	PERSONID   VARCHAR(50),
	BILLDATE   TIMESTAMP,
	AMOUNT     DOUBLE
);

在系統中,可以采取一些必要的步驟來檢索信息,包括按 BILLDATE 對账單信息分類,然後對所有數據記錄進行查詢,直到找到特定的記錄。整個過程開銷很大,並將隨着業務的增長而變慢。然而,由於账單是在特定時間段內生成的,例如,具體某一天,因此不需要對整個表進行處理,可以使用分頁查詢來查找記錄的特定部分,從而提高操作效率。

現有查詢功能的局限性

RetrieveAll 是 JDBC Adapter 出站流程 (outbound process) 提供的基本數據庫操作之一。它允許您指定檢索特定數據記錄的搜索條件。在 Version 7.5 以前,RetrieveAll 並不支持分頁查詢功能。您必須自己編寫代碼來實現此功能,或者對數據庫檢索行为進行優化。然而,這兩種方法都非常繁瑣和笨拙,難以滿足多變的業務需求。

分頁查詢機制

從 Version 7.5 開始,JDBC Adapter 提供了內置的分頁查詢功能,为 RetrieveAll 操作添加了三個 InteractionSpec 屬性:

  • enablePaging:RetrieveAll 將在 enablePaging 設置为 true 時執行分頁查詢。默認情況下,該屬性被設置为 false,JDBC Adapter 將對所有記錄執行查詢。
  • pageSize:該屬性指定返回的結果集的大小。
  • startIndex:該屬性指定分頁查詢的起始位置。例如,startIndex=100 和 pageSize=50 意味着分頁查詢將返回 50 條記錄,起始位置为第 101 條記錄。

在預配置向導中,還可以在 JDBC Adapter 運行於 IBM BPM 時動態設置這些屬性,IBM BPM 支持動態修改 InteractionSpec 屬性。因此,您可以通過修改 pageSize 和 startIndex 的值來針對特定目標運行查詢。


配置 WebSphere Adapter for JDBC

您可以在 IBM Integration Designer(後面簡稱为 Integration Designer)中完成 JDBC Adapter 的配置。

为出站流程生成組件

本文样例要求您首先創建一個 JDBC Adapter 出站流程。您可以通過下面的步驟創建該流程:

  1. 首先需要導入 JDBC Adapter。在 IBM Integration Designer 中,在 Business Integration 透視圖下選擇 File > New > External Service。在 “Select the Service Type or Registry” 視圖中,展開 Adapter 並選擇 JDBC。然後在 “Select an Adapter” 視圖中選擇 IBM WebSphere Adapter for JDBC (IBM: 7.5.0.0)。
  2. 接下來,使用 JDBC Adapter Outbound 向導創建一個服務來訪問數據庫系統。要導入所需的 JDBC 驅動,請在 “Locate the Required Files and Libraries” 視圖中選擇添加 JDBC 驅動程序。在本样例中,我們使用了 DB2,它要求使用 db2jcc.jar 和 db2jcc_license_cu.jar。然後,在 “Select the Processing Direction” 視圖中,選擇 Outbound
  3. 在 “Specify the Discovery Properties” 視圖中,輸入數據庫名稱、IP 地址、用戶名和密碼。
  4. 在 “Specify the Enterprise Properties” 視圖中,單擊 Run Query 按鈕。所有數據庫模式都列在 “Discovered Objects” 表中。然後選擇目標表並將其加入到 Selected objects 列表中。
  5. 現在,指定數據庫操作和屬性。在 Specify Composite Properties 視圖中,如圖 1 所示,確保 “Operations for selected business objects” 列表中包含 RetrieveAll 操作。要指定操作屬性,請單擊 Advanced 按鈕,展開 RetrieveAll Configuration properties,並为隊列屬性的分頁指定默認值。

    圖 1. Composite Properties 視圖
    Composite Properties 視圖

    在該視圖中,選擇 Return specified number of records per page beginning with the starting index (enablePaging=true)。然後在 “Starting index to return records” 字段中設置为 0,在 “Number of records per page” 字段中設置为 10 (startIndex=0, pageSize=10)。注意,必須選中 Generate a business graph for each business object 選項。在運行時環境中,需要在業務圖屬性中修改 startIndex 和 pageSize 的值。

  6. 在這裏,使用了數據庫連接的默認設置。在 “Specify the Service Generation and Deployment Properties” 視圖中,選擇 Using security properties from the managed connection factory,並取消選擇 Join the global transaction。然後,在 Database connection information 的下拉菜單中,選擇 Specify local database connection information
  7. 單擊 Finish。JDBC Adapter Outbound 組件將顯示在 Assembly Diagram 中,如圖 2 所示。

    圖 2. Assembly Diagram
    Assembly Diagram

對查詢結果進行排序

您現在已經通過上述步驟完成了 JDBC Adapter 配置。在實際的業務場景中,要改善查詢效率,開發人員通常需要根據某些字段對查詢結果進行升序或降序排序。在本例中,業務場景要求根據 BILLDATE 對結果進行排序。這可以通過以下步驟實現:

  1. 使用 Business Integration 透視圖,展開 Data,您將看到为账單表自動生成的一個業務對象。選擇該業務對象並在 Business Object Edit 視圖中打開它。右鍵單擊 billdate 元素並選擇 Show In-Properties View
  2. 在 Properties 視圖中,打開 Application info 選項卡並選擇 JDBCAttributeTypeMetadata,然後選擇 New-OrderBy,在文本字段中設置 DESC(或 ASC)。查詢結果會根據 billdate 字段以降序(或升序)排列。

通過各種方法集成分頁查詢功能

自從 IBM BPM V7.5 支持動態修改 InteractionSpec 屬性以來,可以使用多種方法在運行時環境中集成分頁查詢功能和現有項目。在本文中,我們將介紹三種方法:

集成 Java 代碼

  1. 在 Integration Designer 中,在 Assembly Diagram 中創建一個 Java 組件,如圖 3 所示。然後創建一個新的界面並導入到該 Java 組件。

    圖 3. 在 Assembly Diagram 中添加一個 Java 組件
    在 Assembly Diagram 中添加一個 Java 組件

  2. 在界面編輯視圖中,添加 Request Response Operation,並定義四個輸入参數,为 InteractionSpec 屬性指定值和查詢條件。然後为返回查詢結果定義一個輸出参數,如圖 4 所示。

    圖 4. 編輯界面
    編輯界面

  3. 在 Assembly Diagram 中,在 Java 組件和 JDBC Adapter Outbound 組件之間創建一個連接,如圖 5 所示。

    圖 5. 在 Assembly Diagram 中連接 Java 組件和 JDBC Adapter 組件
    在 Assembly Diagram 中連接 Java 組件和 JDBC Adapter 組件

  4. 右鍵單擊 Java 組件來實現該組件。然後使用清單 2 所示代碼替換 operation1 方法。

    清單 2. Java 組件的實現代碼
    						
    public DataObject operation1(Boolean enablePaging, Integer pageSize,
            Integer startIndex, DataObject inputBusinessObject) {
            DataObject response = null;
    		try
    		{
               DataObject props = inputBusinessObject.createDataObject
                ("properties");
                props.setBoolean("ISenablePaging", enablePaging);
                props.setInt("ISpageSize", pageSize);
                props.setInt("ISstartIndex", startIndex);
                response = (DataObject) this.locateService_
                 JDBCOutboundInterfacePartner().invoke
                 ("retrieveallDb2adminBillBG", inputBusinessObject);
            }
             catch (Exception ex)
            {
             ex.printStackTrace();
            }
            return response;
       }

    您已經完成了該項目的開發和配置。要在 Integration Designer 中測試它,首先需要將項目部署到 IBM BPM。然後,在 “Universal Test Client” 視圖中,在 startIndex 和 pageSize 字段中輸入值。如圖 6 所示,JDBC Adapter Outbound 組件返回了所需的記錄。



    圖 6. 測試結果
    測試結果

在運行時環境中,您還可以在每次調用上述 Java 組件時動態修改 startIndex 和 pageSize 的值。例如,設置 startIndex=0pageSize=10,以便在第一次調用中返回前十個(0-9)結果集,然後設置 startIndex=20PageSize=10,以便在第二次調用中返回後十個(10-19)匹配項。通過這種方式即可實現完整的分頁查詢功能。

集成 Web 服務

  1. 在 Integration Designer 中,打開 Assembly Diagram,創建一個 Export 組件並將它與 JDBC Adapter Outbound 組件相連,如圖 7 所示。

    圖 7. 在 Assembly Diagram 中添加一個 Export 組件
    在 Assembly Diagram 中添加一個 Export 組件

  2. 右鍵單擊 Export component 並選擇 Generate Binding > Web Service Binding,圖 8 所示。

    圖 8. 生成 Web 服務绑定
    生成 Web 服務绑定

  3. 在 Web Service Export Configuration 向導中,使用默認設置並單擊 Finish,如圖 9 所示。

    圖 9. 生成 Web 服務绑定
    生成 Web 服務绑定

  4. 現在,您可以將項目部署到 IBM BPM。通過如圖 10 所示的 Web Service Binding 地址,您可以執行 JDBC Adapter Outbound 組件中提供的所有操作。

    圖 10. Web Service Binding 地址
    Web Service Binding 地址

  5. 在本例中,將會使用 Firefox® 插件 REST Client 來測試該項目,如圖 11 所示。

    圖 11. REST Client for Firefox
    REST Client for Firefox

  6. 如清單 3 所示,startIndex、pageSize 和 enablePaging 屬性均有預設值。

    清單 3. Soap 消息
    						
    <?xml version="1.0" encoding="UTF-8"?>
    <soap:Envelope xmlns:ns1="http://docs.oasis-open.org/wss/2004/01/
     oasis-200401-wss-wssecurity-secext-1.0.xsd" 
     xmlns:ns3="http://DB2_RetrieveAll_Paging_Test/JDBCOutboundInterface" 
     xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <soap:Header>
        <ns1:Security xsi:type="ns1:SecurityHeaderType">
          <ns1:UsernameToken xsi:type="ns1:UsernameTokenType">
            <ns1:Username/>
            <ns1:Password xsi:type="ns1:PasswordString"/>
          </ns1:UsernameToken>
        </ns1:Security>
      </soap:Header>
      <soap:Body>
        <ns3:retrieveallDb2adminBillBG>
          <ns3:retrieveallDb2adminBillBGInput>
            <properties xmlns="http://www.ibm.com/xmlns/prod/websphere/bo/6.0.0">
                <ISstartIndex xmlns:ns0="http://www.w3.org/2001/XMLSchema" 
                 xmlns="##ONTHEFLY" xsi:type="ns0:int">50</ISstartIndex>
                <ISpageSize xmlns:ns0="http://www.w3.org/2001/XMLSchema" 
                 xmlns="##ONTHEFLY" xsi:type="ns0:int">10</ISpageSize>
                <ISenablePaging xmlns:ns0="http://www.w3.org/2001/XMLSchema" 
                 xmlns="##ONTHEFLY" xsi:type="ns0:boolean">true</ISenablePaging>
            </properties>
            <verb>Create</verb>
            <Db2adminBill>
              <personid>Beckham</personid>
            </Db2adminBill>
          </ns3:retrieveallDb2adminBillBGInput>
        </ns3:retrieveallDb2adminBillBG>
      </soap:Body>
    </soap:Envelope>

  7. 如圖 12 所示,消息內容包括根據 BILLDATE 以降序排列的查詢記錄。

圖 12. 測試結果
測試結果

集成 BPEL

  1. 在 Integration Designer 中,打開 Assembly Diagram,創建一個 Process 組件 (BPEL)。然後創建一個新界面並將它導入到 Process 組件中,如圖 13 所示。

    圖 13. 在 Assembly Diagram 中添加一個 BPEL
    在 Assembly Diagram 中添加一個 BPEL

  2. 在 Interface edit 視圖中,添加 Request Response Operation 並定義兩個輸入参數,指定 pageSize 和 pageIndex 的值。然後为返回的查詢結果定義一個輸出参數,如圖 14 所示。

    圖 14. BPEL 組件的編輯界面
    BPEL 組件的編輯界面

  3. 在 Assembly Diagram 中,在 Java 組件和 JDBC Adapter Outbound 組件之間創建一個連接,如圖 15 所示。

    圖 15. 在 Assembly Diagram 中連接 BPEL 組件和 JDBC Adapter 組件
    在 Assembly Diagram 中連接 BPEL 組件和 JDBC Adapter 組件

  4. 右鍵單擊 Process 組件以實現該組件的業務邏輯,如圖 16 所示。

    圖 16. BPEL 的業務邏輯
    BPEL 的業務邏輯

  5. 在 BPEL 編輯視圖中,創建一個 Snippet 行为,您將在其中實現 Java 代碼,以便为 pageSize 和 pageIndex 屬性設置值,如清單 4 所示。

    清單 4. Snippet 行为的代碼
    						
    commonj.sdo.DataObject __result__1;
    {// create Db2adminBillBG
    	com.ibm.websphere.bo.BOFactory factory =
    	   (com.ibm.websphere.bo.BOFactory) new com.ibm.websphere.sca.
             ServiceManager().locateService("com/ibm/websphere/bo/BOFactory");
    	 __result__1 = factory.create("http://www.ibm.com/xmlns/prod/websphere/j2ca/jdbc/
            db2adminbillbg","Db2adminBillBG");
    }
    retrieveallDb2adminBillBGInput = __result__1;
    commonj.sdo.DataObject props = retrieveallDb2adminBillBGInput.createDataObjectj
     ("properties");
    props.setBoolean("ISenablePaging", true);
    props.setInt("ISpageSize", pageSize);
    props.setInt("ISstartIndex", pageIndex);

  6. 然後,創建一個 Invoke 行为來調用 JDBCOutBound 的 retrieveAllDb2adminBillBG。現在,您已經完成了項目開發。在將項目部署到 IBM BPM 之後,通過在前面步驟 5 中定義的界面上進行測試,就可以在 Integration Designer 中測試它。如圖 17 所示,您可以在響應消息中看到查詢結果集。有關的更多細節,請参考本文附帶的 样例代碼

圖 17. 測試結果
測試結果

結束語

分頁查詢是 WebSphere Adapter for JDBC V7.5 的一項重要特性。它不僅提供數據庫查詢性能,還支持在運行時動態修改返回的結果集的大小。为了幫助您更好地理解並使用它,本文還介紹了在 IBM BPM V7.5 中集成分頁查詢功能的三種方法。

實際上,業務場景可能更加复雜。JDBC Adapter 分頁查詢還提供了各種高級特性,例如,對數據庫視圖執行分頁查詢,以及通過使用內置的 QueryBO 功能執行更加复雜的查詢。有關的更多細節,請参閱 WebSphere Adapter Information Center



下載

描述名字大小下載方法
項目交換文件ProjectInterchange.zip39KBHTTP

關於下載方法的信息


参考資料

學習

獲得產品和技術

討論

作者簡介

 Xiaocheng Wang 的照片

Xiaocheng Wang 是一名軟件工程師,於 2008 年加入 IBM。他在軟件開發、測試和支持方面擁有豐富的經驗。他感興趣的領域包括軟件工程、J2EE 和中間件技術。Xiaocheng 目前關注於 WebSphere 產品的集成解决方案開發。

 Da Zhang 的照片

Da Zhang 是 IBM 中國開發實驗室的一名軟件工程師。他在 WebSphere Integration Developer、IBM Integration Designer 和 IBM Business Process Manager 方面擁有三年多的工作經驗。

頂一下
(0)
0%
踩一下
(0)
0%
------分隔線----------------------------
發表評論
請自覺遵守互聯網相關的政策法規,嚴禁發布色情、暴力、反動的言論。
評價:
表情:
驗證碼:點擊我更換圖片
欄目列表
推薦內容