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

WebSphere® Adapter for JDBC 运行于 IBM® Business Process Manager V7.5 之上,支持数据库和应用程序之间的双向通信。从 IBM BPM V7.5 开始,WebSphere Adapter for JDBC 新增了一个内置的分页查询功能。本文将介绍如何配置和使用分页查询,还将介绍在 IBM BPM 中集成分页查询功能的几种方法。

Xiaocheng Wang, 软件工程师, IBM

 Xiaocheng Wang 的照片Xiaocheng Wang 是一名软件工程师,于 2008 年加入 IBM。他在软件开发、测试和支持方面拥有丰富的经验。他感兴趣的领域包括软件工程、J2EE 和中间件技术。Xiaocheng 目前关注于 WebSphere 产品的集成解决方案开发。



Da Zhang, 软件工程师, IBM

 Da Zhang 的照片Da Zhang 是 IBM 中国开发实验室的一名软件工程师。他在 WebSphere Integration Developer、IBM Integration Designer 和 IBM Business Process Manager 方面拥有三年多的工作经验。



2012 年 12 月 03 日

简介

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.zip39KB

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=848204
ArticleTitle=在 IBM Business Process Manager V7.5 中集成 WebSphere Adapter for JDBC 的分页查询功能
publish-date=12032012