BPEL 2.0服务契约之实战篇:WS-BPEL流程服务如何与伙伴服务产生交互?

日期: 2009-07-02 作者:Yuli Vasilev翻译:杨晓明 来源:TechTarget中国 英文

在本文的第四部分,我们运用了大量的实例介绍如何创建WS-BPEL流程服务。在本文,我们将进一步用实例介绍WS-BPEL流程服务如何与伙伴服务产生交互。   polnfo WSDL定义   我们介绍的这个Hello流程服务只是WS-BPEL流程服务的一个简化例子。它没有使用伙伴服务来完成这个工作,仅仅是根据客户端发来的数据基础上合成了一个hello消息。

相比之下,在现实中的WS-BPEL流程在执行期间可能会调用很多伙伴服务。   接下来的例子描述的是poInfo WS-BPEL流程服务,它和另外两个伙伴服务产生交互:   poOrderDocService和poOrderStatusServic……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

在本文的第四部分,我们运用了大量的实例介绍如何创建WS-BPEL流程服务。在本文,我们将进一步用实例介绍WS-BPEL流程服务如何与伙伴服务产生交互。

  polnfo WSDL定义

  我们介绍的这个Hello流程服务只是WS-BPEL流程服务的一个简化例子。它没有使用伙伴服务来完成这个工作,仅仅是根据客户端发来的数据基础上合成了一个hello消息。相比之下,在现实中的WS-BPEL流程在执行期间可能会调用很多伙伴服务。

  接下来的例子描述的是poInfo WS-BPEL流程服务,它和另外两个伙伴服务产生交互:

  poOrderDocService和poOrderStatusService。

  我们从poInfo的WSDL定义开始:

  点击查看例10。

  当客户端发送包含两个参数(pono和par)的请求消息时,poInfo流程服务即被调用。第一个参数指定了你要从订单文档中获取的pono信息,第二个指定了信息需要返回什么样的信息,意味着两种可能的选择:整个文档或文档的状态。

  例10还说明了WSDL定义如何导入两个描述poOrderDocService和poOrderStatusService伙伴服务的定义。这个例子假设已经创建好了po_orderdoc.wsdl和po_orderstatus.wsdl。

  当对输入消息进行定义时,注意poInfoRequest复杂类型的用法。这个结构允许让客户端发送两个参数成为可能,即在一个请求消息中的pono和par。

  这里还需要注意的一点是三个伙伴链接的用法。第一个定义了WS-BPEL流程服务和它的客户端之间的交互,而另外两个定义了WS-BPEL服务分别与poOrderDocService和poOrderStatusService伙伴服务的关系。

  poInfo WS-BPEL的定义

  下面的WS-BPEL定义比我们之前讨论的稍稍复杂些。这是因为下面展示的poInfo.bpel定义包含了条件逻辑:

  点击查看例11。

  例11中WS-BPEL流程定义最有意思的部分是if/elseif/else结构。

  例12用示意图来诠释:

  点击查看例12。

  注意例12内部序列结构的用法。WS-BPEL其实不允许在if或elseif或else块中使用一个以上的活动。这就是为什么不得不按顺序在这些块中包装一组活动。

  假设你把剩下的部分也放在合适的位置,流程也能够成功执行,接下来可以用下面的PHP脚本来测试。

  点击查看例13。

  这应该输出整个po文档,pono为108128476。如果把上面脚本中的$xmldoc变量设置如下:$xmldoc = '108128476status';

  那么你应该会收到一条短消息:shipped,这表示文档目前的状态。

  总结

  流程服务可能看似建立了一种Web服务的终端,正如SOA实施中的其他服务一样。然而,由于WS-BPEL语言对WSDL定义有着很具体的要求,所以需要增加额外的结构,并进行优化。理解这些新元素,理解它们如何把一个服务作为更大的服务合成中一个潜在的众多伙伴服务之一,是非常重要的。因为尽管任何一个WS-BPEL流程将合成其他服务,但是通过创建自己的WSDL服务契约,WS-BPEL流程就可以像任何其他服务一样具有可合成性。即作为一个流程,同时也作为一个服务存在。

  关于作者

  Yuli Vasiliev是软件开发者、自由撰稿人和咨询师。目前专注于开源开发、Oracle技术和SOA。他具有十多年的软件开发经验和七年多的技术写作经验。他出版的新书《SOA and WS-BPEL》具体详述了如何使用开源产品PHP和ActiveBPEL引擎创建和部署你自己的面向服务解决方案。

  下载本系列文章的PDF版本

  技术手册:BPEL 2.0服务契约手册PDF下载

相关推荐