这个文章系列主要介绍了组合业务服务(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”));
演示这个用例
在这个部分中,您可以看到包括信用公司的配置和贷款请求用例的完整情况。在贷款请求用例中实现和自定义并行活动模式之后,信用公司的配置和贷款请求用例的主要步骤包括:
·银行管理员登录到银行,并查看信用代理公司配置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是一种功能非常强大并且非常灵活的技术。通过使用一些成熟的模式,如并行活动模式,您可以为您的客户设计和实现更加可靠的、且更加灵活的业务流程。在本文中,您了解了有关并行活动模式和在贷款请求用例中实际实现的内容。这个模式可以帮助实现业务流程的灵活性和可配置性。
作者简介
Qiang Wang是 China Technology Institute, China Software Development Laboratory的一位软件工程师。他的工作重点是IBM Incubator Project和SOA相关主题。他的兴趣包括J2EE、SOA、MDA/MDD、AOP和RUP。他当前从事与WBM、WebSphere Integration Developer和WPS相关的开发工作。
Carl Osipov是IBM Software Group内的Strategy and Technology Organization的一名软件工程师。他所擅长的领域是分布式计算、语音应用程序开发和计算自然语言理解。他在本行业以及大众媒体上发表了一些SOA和沟通对话管理主题方面的文章,并举行过这方面的讲座。目前,他重点研究设计组合业务服务的重用技巧。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
预测分析案例:预测分析如何提升业务流程价值
过预测分析,客户服务从原来的被动状态转向了主动状态。以呼叫中心为例,我们来谈谈客户服务。我们曾经与Independence Blue Cross合作过,这是一家保险公司。
-
企业流程新途径:BPM与SAP结合
对于现代企业而言,SAP所提供的解决方案已经满足了企业大部分的需求,但是由于企业制度、规则和管理体系大都散落在各个业务系统,管理和变更这些要素并非易事。
-
保险公司如何能从BPEL中获益
对于保险业整合不同系统是一件寻常的工作。但保险公司经常会面临监管条例改变和应对不同的顾客需求。为了解决这些系统问题,软件专家正在使用一种强大的工具——BPEL。
-
2013年业务流程执行语言(BPEL)现状
在SOA领域中,BPEL拥有属于自己的集成系统和自动化工作流,为协调完全异构系统而提供一致的流程。