IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  SOA and Web services  >

构建 SOA 组合业务服务,第 9 部分: 面向灵活性和可配置性的业务流程并行活动模式

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

讨论


级别: 中级

Qiang Wang (wangq@cn.ibm.com), 软件工程师, IBM
Carl Osipov (osipov@us.ibm.com), 软件架构师, IBM

2007 年 9 月 21 日

这个文章系列主要介绍了组合业务服务 (CBS) 的开发,本文是其中的第 9 部分。可以通过组合现有的 SOA 服务得到 CBS,或者作为一个新的服务创建 CBS,它们的目的都是提供可配置性。本文介绍了用于为 CBS 设计业务流程执行语言 (BPEL) 流程的并行活动模式。本文提供了一个银行用例示例,该用例实现了这种模式,以便在从 CBS 构建的简单应用程序中创建灵活的、可配置的业务流程。本文描述了一个利用 BPEL 并行活动来实现实际用例的解决方案。可以实例化多个并发流程,并发流程的数目是不确定的,可以由业务对象在运行时指定。本文首先简单介绍了并行活动模式,然后提供了一个贷款请求用例,通过这个用例您将了解如何使用并行活动模式以实现灵活性和可配置性。

回顾贷款请求用例

您可以查看本系列中的其他文章以获得到目前为止有关这个用例场景的详细信息。在这个场景中,贷款请求用例是在某个银行客户使用该银行的 Web 门户申请贷款产品时触发的。来自银行的、基于 Web 的用户界面的贷款应用程序的提交操作,将调用贷款审批 BPEL 流程。这个流程将从该客户的配置文件中检索他的社会保险号,并使用这个编号来调用一个信用检查 BPEL 流程,从而实现了并行活动模式。信用检查 BPEL 从多个代理处获得一份信用评分的列表,并将该列表返回给贷款审批流程。根据信用检查 BPEL 流程所返回的列表中的实际信用评分,可以自动地拒绝或批准这个贷款请求,或者将其转发以便进行人工审核。根据信用检查 BPEL 流程所返回的列表计算平均信用评分,通过一组基于这个评分的业务规则作出相应的决策。

当一个贷款请求需要人工审核时,贷款审批流程将调用另一个 BPEL 子流程,其中包括人工任务的使用。将信用评分列表转发到这个 BPEL 子流程。该银行将检查这个信用评分列表以及与申请者相关的附加信息,并决定是否应该批准这个贷款请求。

使用并行活动模式

在开始设计 BPEL 流程时,您可以使用任何模式,如同步模式、基于状态模式、或者并行活动模式的不同类型(请参见参考资料)。这个部分介绍了一种并行活动模式,这种模式在进行 BPEL 设计的时候不需要知道并行活动的数目。对于直到运行时才能确定要调用的实例数目的情况,这种模式可以并发地调用多个 BPEL 流程实例。这种模式还可以确保在工作流结束之前完成所有的流程实例。即将推出的 WS-BPEL 2.0 规范中计划包含这种并行活动模式,其中使用了一个新的 BPEL forEach 活动,以及子流程并行调用的一个关联标志。本文描述了如何遵循并行活动模式并使用现有的 WebSphere® Integration Developer 6.0 工具来实现其中每项活动的功能。图 1 阐释了这个模式:


图 1. 并行活动模式
并行活动模式

名为 MultiInvokeRun 的父 BPEL 流程(如图 1 中的上半部分所示)使用一个名为 InvokeAll的循环元素(如图 1 中的左上部分所示)进行重复的、单向的(异步)调用。第二个循环称为 WaitReplies(如图 1 中的右上部分所示),它并行地运行,并且在子流程(如图 1 的下半部分中描述的 MultiInvokeChild 流程)完成时用于接收通知。在第一次调用之前,对于每次循环,都会在 MultiInvokeRun 流程的 SetUpCounters 活动中初始化一个计数器。可以在运行时通过这个计数器来帮助指定子流程的数目。直到接收到来自所有子流程的通知,WaitReplies 循环才会结束。当 WaitReplies 循环结束时,父 BPEL 流程 MultiInvokeRun 也就完成了。





回页首


在贷款请求用例中使用并行活动模式

贷款请求用例是更广泛的业务流程中的一部分,而这个流程在初始情况下没有使用该模式。在使用并行活动模式之前,该流程使用单个信用代理公司所提供的单个信用检查服务。在贷款请求流程的每个实例中,银行雇员和经理使用银行客户信用评分的信用检查结果来决定该银行是否应该批准这个客户的贷款请求。然而,如果银行希望通过多个信用代理公司来提供信用检查服务,那么这种设计就有问题,在贷款请求流程中,银行每次只能够查询一个服务。因此,您可以在设计中使用并行活动模式来解决这个问题。通过在您的贷款请求流程中使用这种并行活动模式,银行管理员可以在运行时配置信用历史公司,并为银行专家提供来自多个信用历史公司的信用评分列表。

对并行活动模式进行自定义

在标准的并行活动模式中(如图 1 所示),您可以看到,子流程每次都调用相同的服务,如图 1 中下半部分所示的 ActA 元素。在这个示例贷款请求用例中,有不同的需求,因为由不同的信用代理公司所提供的每个信用检查服务具有不同的端点。实际上,这些服务是不相同的,尽管它们提供了相同的接口定义。对于这个示例,自定义并行活动模式并利用动态端点设置机制以帮助实现示例用例的需求。图 2 中显示了自定义并行活动模式。


图 2. 自定义并行活动模式
自定义并行活动模式

在子流程中,使用 Java™ 代码片段 CallCreditCheckServiceWithUpdatedEndp 替换原始调用元素。您可以利用动态端点设置机制,以便每次调用不同的信用检查服务端点。这个 Java 代码片段中嵌入的代码如清单 1 所示。


清单 1. 动态端点设置
                
// Create a new Endpoint Reference Object, update its address information.
EndpointReference eRef = EndpointReferenceFactory.INSTANCE.createEndpointReference();
eRef.setAddress(multiInvokeChildInput.getString("endpointAddress"));

// Get the credit check service with the updated endpoint reference.
Service creditCheckService = 
(Service) ServiceManager.INSTANCE.getService("CreditCheckQueryServicePartner", eRef);

 // Prepare input parameter to invoke credit check service
DataObject requestMsg = 
BoFactory.createByMessage("http://creditcheckservice","retrieveCreditScoreRequest");
DataObject requestEle = 
boFactory.createByElement("http://creditcheckservice","retrieveCreditScore");
requestEle.setString("SSN",multiInvokeChildInput.getString("ssn"));		
requestMsg.setDataObject("parameters",requestEle);

// Invoke the credit check service with the updated endpoint reference
DataObject responseMsg = 
(DataObject) creditCheckService.invoke("retrieveCreditScore",requestEle);
creditCheckOutput.setInt
("retrieveCreditScoreReturn",responseMsg.getInt("retrieveCreditScoreReturn"));
      

演示这个用例

在这个部分中,您可以看到包括信用公司的配置和贷款请求用例的完整情况。在贷款请求用例中实现和自定义并行活动模式之后,信用公司的配置和贷款请求用例的主要步骤包括:

  1. 银行管理员登录到银行,并查看信用代理公司配置 Portlet,其中列出了该银行正在使用的各个公司。图 3 显示了信用代理公司配置 Portlet。

    图 3. 信用历史公司配置 Portlet
    信用历史公司配置 Portlet

  2. 银行客户登录到银行门户,如图 4 所示,并申请一项贷款。

    图 4. 贷款应用程序 Portlet
    贷款应用程序 Portlet

  3. 贷款审批流程仅查询一个信用历史公司:IBM。将贷款请求转发到贷款专家,以进行审核。在贷款专家登录到 BPC 之后,如图 5 所示,贷款专家所看到的任务页面显示了客户贷款请求细节,以及来自 IBM 提供的信用检查服务的信用评分。

    图 5. BPC 中的人工任务页面
    BPC 中的人工任务页面

  4. 银行管理员登录到银行中,看到信用历史公司配置 Portlet,其中列出了该银行正在使用的公司的列表,如图 6 中所示。从该银行所使用的服务注册中心(使用关系数据库来实现)中检索建议的候选者列表,并且银行管理员将看到这些公司的名称。银行管理员进行选择,并接受两家公司作为信用检查服务提供者:IBM 和 SEA。这两个服务的端点地址是不同的,如图 7 中所示。

    图 6. 信用历史公司配置 Portlet
    信用历史公司配置 Portlet



    图 7. 选择了公司的信用历史公司配置 Portlet
    选择了公司的信用历史公司配置 Portlet

  5. 同一个银行客户登录到银行门户,并再次申请相同的贷款产品,如图 8 所示。

    图 8. 贷款应用程序 Portlet
    贷款应用程序 Portlet

  6. 贷款审批流程查询多个信用历史公司,包括银行管理员选择的所有公司。将新的贷款请求转发到银行贷款专家,以进行审核。在贷款专家登录到 BPC 之后,如图 9 所示,贷款专家所看到的任务页面显示了客户贷款请求细节,以及贷款审批流程所查询的、来自所有信用历史公司(包括 IBM 和 SEA)的所有信用评分。

    图 9. BPC 中的人工任务页面
    BPC 中的人工任务页面





回页首


结束语

BPEL 是一种功能非常强大并且非常灵活的技术。通过使用一些成熟的模式,如并行活动模式,您可以为您的客户设计和实现更加可靠的、且更加灵活的业务流程。在本文中,您了解了有关并行活动模式和在贷款请求用例中实际实现的内容。这个模式可以帮助实现业务流程的灵活性和可配置性。





回页首


致谢

作者感谢 Matthias Kloppman 和 Indrajit Poddar,他们为本文提出了宝贵意见和建议。

共享本文……

digg 请 Digg 这个故事
del.icio.u 发布到 del.icio.u
Slashdot Slashdot 一下!



参考资料

学习

获得产品和技术
  • 使用 IBM 试用软件开发您的下一个项目,可下载或索取 DVD 光盘。


讨论


作者简介

Qiang Wang photo

Qiang Wang 是 China Technology Institute, China Software Development Laboratory 的一位软件工程师。他的工作重点是 IBM Incubator Project 和 SOA 相关主题。他的兴趣包括 J2EE、SOA、MDA/MDD、AOP 和 RUP。他当前从事与 WBM、WebSphere Integration Developer 和 WPS 相关的开发工作。


author photo

Carl Osipov 是 IBM Software Group 内的 Strategy and Technology Organization 的一名软件工程师。他所擅长的领域是分布式计算、语音应用程序开发和计算自然语言理解。他在本行业以及大众媒体上发表了一些 SOA 和沟通对话管理主题方面的文章,并举行过这方面的讲座。目前,他重点研究设计组合业务服务的重用技巧。




对本文的评价










回页首


IBM 和 WebSphere 是 IBM Corporation 在美国和/或其他国家/地区的商标。 Java 和所有基于 Java 的商标都是 Sun Microsystems, Inc. 在美国和/或其他国家/地区的商标。 其他公司、产品或服务名称可能为各自所有者的商标或服务标志。 其他公司、产品或服务的名称可能是其他公司的商标或服务标志。

IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款