您可以查看本系列中的其他文章以获得到目前为止有关这个用例场景的详细信息。在这个场景中,贷款请求用例是在某个银行客户使用该银行的 Web 门户申请贷款产品时触发的。来自银行的、基于 Web 的用户界面的贷款应用程序的提交操作,将调用贷款审批 BPEL 流程。这个流程将从该客户的配置文件中检索他的社会保险号,并使用这个编号来调用一个信用检查 BPEL 流程,从而实现了并行活动模式。信用检查 BPEL 从多个代理处获得一份信用评分的列表,并将该列表返回给贷款审批流程。根据信用检查 BPEL 流程所返回的列表中的实际信用评分,可以自动地拒绝或批准这个贷款请求,或者将其转发以便进行人工审核。根据信用检查 BPEL 流程所返回的列表计算平均信用评分,通过一组基于这个评分的业务规则作出相应的决策。
当一个贷款请求需要人工审核时,贷款审批流程将调用另一个 BPEL 子流程,其中包括人工任务的使用。将信用评分列表转发到这个 BPEL 子流程。该银行将检查这个信用评分列表以及与申请者相关的附加信息,并决定是否应该批准这个贷款请求。
在开始设计 BPEL 流程时,您可以使用任何模式,如同步模式、基于状态模式、或者并行活动模式的不同类型(请参见参考资料)。这个部分介绍了一种并行活动模式,这种模式在进行 BPEL 设计的时候不需要知道并行活动的数目。对于直到运行时才能确定要调用的实例数目的情况,这种模式可以并发地调用多个 BPEL 流程实例。这种模式还可以确保在工作流结束之前完成所有的流程实例。即将推出的 WS-BPEL 2.0 规范中计划包含这种并行活动模式,其中使用了一个新的 BPEL forEach 活动,以及子流程并行调用的一个关联标志。本文描述了如何遵循并行活动模式并使用现有的 WebSphere® Integration Developer 6.0 工具来实现其中每项活动的功能。图 1 阐释了这个模式:
名为 MultiInvokeRun 的父 BPEL 流程(如图 1 中的上半部分所示)使用一个名为 InvokeAll的循环元素(如图 1 中的左上部分所示)进行重复的、单向的(异步)调用。第二个循环称为 WaitReplies(如图 1 中的右上部分所示),它并行地运行,并且在子流程(如图 1 的下半部分中描述的 MultiInvokeChild 流程)完成时用于接收通知。在第一次调用之前,对于每次循环,都会在 MultiInvokeRun 流程的 SetUpCounters 活动中初始化一个计数器。可以在运行时通过这个计数器来帮助指定子流程的数目。直到接收到来自所有子流程的通知,WaitReplies 循环才会结束。当 WaitReplies 循环结束时,父 BPEL 流程 MultiInvokeRun 也就完成了。
贷款请求用例是更广泛的业务流程中的一部分,而这个流程在初始情况下没有使用该模式。在使用并行活动模式之前,该流程使用单个信用代理公司所提供的单个信用检查服务。在贷款请求流程的每个实例中,银行雇员和经理使用银行客户信用评分的信用检查结果来决定该银行是否应该批准这个客户的贷款请求。然而,如果银行希望通过多个信用代理公司来提供信用检查服务,那么这种设计就有问题,在贷款请求流程中,银行每次只能够查询一个服务。因此,您可以在设计中使用并行活动模式来解决这个问题。通过在您的贷款请求流程中使用这种并行活动模式,银行管理员可以在运行时配置信用历史公司,并为银行专家提供来自多个信用历史公司的信用评分列表。
在标准的并行活动模式中(如图 1 所示),您可以看到,子流程每次都调用相同的服务,如图 1 中下半部分所示的 ActA 元素。在这个示例贷款请求用例中,有不同的需求,因为由不同的信用代理公司所提供的每个信用检查服务具有不同的端点。实际上,这些服务是不相同的,尽管它们提供了相同的接口定义。对于这个示例,自定义并行活动模式并利用动态端点设置机制以帮助实现示例用例的需求。图 2 中显示了自定义并行活动模式。
在子流程中,使用 Java™ 代码片段 CallCreditCheckServiceWithUpdatedEndp 替换原始调用元素。您可以利用动态端点设置机制,以便每次调用不同的信用检查服务端点。这个 Java 代码片段中嵌入的代码如清单 1 所示。
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 " ));
在这个部分中,您可以看到包括信用公司的配置和贷款请求用例的完整情况。在贷款请求用例中实现和自定义并行活动模式之后,信用公司的配置和贷款请求用例的主要步骤包括:
- 银行管理员登录到银行,并查看信用代理公司配置 Portlet,其中列出了该银行正在使用的各个公司。图 3 显示了信用代理公司配置 Portlet。
图 3. 信用历史公司配置 Portlet
- 银行客户登录到银行门户,如图 4 所示,并申请一项贷款。
图 4. 贷款应用程序 Portlet
- 贷款审批流程仅查询一个信用历史公司:IBM。将贷款请求转发到贷款专家,以进行审核。在贷款专家登录到 BPC 之后,如图 5 所示,贷款专家所看到的任务页面显示了客户贷款请求细节,以及来自 IBM 提供的信用检查服务的信用评分。
图 5. BPC 中的人工任务页面
- 银行管理员登录到银行中,看到信用历史公司配置 Portlet,其中列出了该银行正在使用的公司的列表,如图 6 中所示。从该银行所使用的服务注册中心(使用关系数据库来实现)中检索建议的候选者列表,并且银行管理员将看到这些公司的名称。银行管理员进行选择,并接受两家公司作为信用检查服务提供者:IBM 和 SEA。这两个服务的端点地址是不同的,如图 7 中所示。
图 6. 信用历史公司配置 Portlet
图 7. 选择了公司的信用历史公司配置 Portlet
- 同一个银行客户登录到银行门户,并再次申请相同的贷款产品,如图 8 所示。
图 8. 贷款应用程序 Portlet
- 贷款审批流程查询多个信用历史公司,包括银行管理员选择的所有公司。将新的贷款请求转发到银行贷款专家,以进行审核。在贷款专家登录到 BPC 之后,如图 9 所示,贷款专家所看到的任务页面显示了客户贷款请求细节,以及贷款审批流程所查询的、来自所有信用历史公司(包括 IBM 和 SEA)的所有信用评分。
图 9. BPC 中的人工任务页面
BPEL 是一种功能非常强大并且非常灵活的技术。通过使用一些成熟的模式,如并行活动模式,您可以为您的客户设计和实现更加可靠的、且更加灵活的业务流程。在本文中,您了解了有关并行活动模式和在贷款请求用例中实际实现的内容。这个模式可以帮助实现业务流程的灵活性和可配置性。
学习
- 使用 RSS feed 获取有关本系列即将推出的文章的通知。(找到更多有关 developerWorks 内容的 RSS feed。)
- 查看本系列中所有文章。
- 参考 用于 Web 服务的业务流程执行语言(1.1 版)。
- 从 使用服务组件体系结构构建 SOA 解决方案 获得更多内容。
- 访问针对 Service Component Architecture(服务组件体系结构) 的 IBM 网站。
- 从 服务数据对象简介 获得更多的信息。
- 参考 IBM 红皮书 Patterns:Service-Oriented Architecture and Web Services。
- 参考资源 Web Services Business Process Execution Language Version 2.0 Draft 11.7.Processing Multiple Branches – ForEach。
- 查看 Wil van der Aalst Workflow Patterns 主页。
- IBM developerWorks SOA and Web services 专区 提供了大量的文章,以及关于如何开发 Web 服务应用程序的初级、中级和高级教程。
- IBM SOA 网站 提供 SOA 的概述,并介绍 IBM 是如何帮助您实现 SOA 的。
- 了解关于 developerWorks 技术事件和网络广播的最新消息。
- 访问 Safari 书店,浏览有关这些技术主题以及其他方面的书籍。