级别: 初级 Suhayl Masud (SuhaylA@DifferentThinking.com), 发起人和首席设计师, Different Thinking咨询公司的发起人和首席设计师
2003 年 7 月 01 日 牛顿爵士曾经写道,“如果我看得比别人远一些,那是因为我站在巨人的肩膀上”。我们应该非常关注这种智慧并保证Web服务中使用现有的知识和专门技术以便“做得更好”。为Web服务提供能够站立的肩膀的“巨人”是RosettaNet,它已经花了5年的时间来创建和实现业务合作伙伴间自动化的电子商务对话。Web服务能够将这些做法深入发展下去,将普遍存在的技术应用到电子商务的对话中,使电子商务对话变得容易实现并得到广泛应用。
这是一系列通过创建可以用于处理真实业务的电子商务对话来展示Web服务的真正潜力的文章中的第二篇。电子商务对话将以现实世界的业务问题为基础,而采用RosettaNet提供的确实可靠的解决方案来解决问题。在这个系列中,我将向您展示Web服务中最重要的部分是电子商务对话。在这篇文章中,我将讨论以下内容:
-
在电子商务对话中使用Web服务时遇到的挑战
- RosettaNet的组件
- 如何将RosettaNet转换成WSDL和BPEL
- RosettaNet和BPEL4WS的互补本质
在本系列中的第一部分(参见
参考资料), 我解释了Web服务的真正价值在于在业务合作伙伴之间创建协作式的电子商务对话。我还解释了电子商务对话是什么,它们如何工作。本文的以下部分将演示如何采用RosettaNet PIP3A4和BPEL4WS来创建一个扩展的电子商务情景。
转变Web服务的思维方式
实现Web服务的真正潜力——采用基于普遍存在的技术的、能负但得起的和广泛使用的电子商务对话
——需要对现有的Web服务思维方式作出少量的哲学上的改变。很幸运, BPEL4WS提供了必要的改变。
对等体之间的电子商务对话
第一,通过Web服务进行交互的组织应该被当作是在平等基础上操作的对等体。这意味着当服务提供者处于正常的对话状态时,服务请求者和服务提供者简单地变成伙伴,与当前只简单地响应请求的角色不同。要实现这一点,服务提供者必须有返回途径与服务请求者进行通信。现在,这种通信或者发生在接入请求的同一个http连接中,或者通过分析请求的http头部得到技术地址来进行。要实现对等体之间的正常对话,地址必须具有商业语义学,它还必须属于某个商业事务。通过BPEL4WS,Web服务可以得到进行对等体对话的必要增强功能。
交互必须有状态
在当前的Web服务界,大多数Web服务是同步的。这意味着请求者必须一直等待响应。如果响应能够马上得到,这当然工作得很好。在简单的请求/响应实现案例中确实如此,如浏览器向Web服务器请求页面,或用于查看股票的交易价格的应用程序。然而,在需要长时间运行的商业事务中,不可能连续等待一个可能要花几个小时或几天的响应。想象您在与一个同事打电话,而必须在电话机上等几个小时,直到同事给您的请求准备好响应这种情景。
在当前的请求/响应设计中,服务提供者仅关心在同一个打开的连接中的响应;服务提供者不保存可以用来与请求者联系以得到对话进行的状态的方法。在这种(同步的)请求/响应设计中,对话没有状态标志;它简单地基于请求产生响应。要进行正确的电子商务对话,交互作用必须是异步的和有状态的。
现实的电子商务情景
BPEL4WS给Web服务提供必要的方法以在对等体之间实现电子商务对话,并创建异步的有状态的交互,它仍然需要使用这些方法来创建现实的电子商务情景。换句话来说,BPEL4WS提供了用以创建健壮的可执行业务流程的所有工具;而由合作伙伴使用这些工具来实现有意义的电子商务对话。
您当然可以仅将我们的电子商务对话连接起来,但是通过借鉴已经在创建专家级的电子商务对话上花了许多时间和精力的专家的经验,你能够做得更好。如前所述,这是您可以使用RosettaNet组件来建设自已的现实世界电子商务对话的地方。真正的细节和代码将会在这个系列的后二篇文章中展示。在这篇文章中,我将会讲述创建基于RosettaNet的Web服务所必须遵循的概念上的步骤。
使用RosettaNet
记住,一个好的电子商务对话具有下列特征:
- 开放式可访问公共接口合作伙伴角色
- 合作伙伴角色
- 用达成协议的choreography交换的标准消息
- 标准词汇
- 可靠又可信的环境
在这个系列中要创建的电子商务对话中,RosettaNet 中的PIP3A4购买订单将帮助定义公共接口。它将使用PIP中定义的合作伙伴角色和choreography以及RosettaNet PIP中的标准消息,并且将它们用作BPEL4WS消息。
现在让我们看一下RosettaNet的组件以及如何进行基于RosettaNet的电子商务对话。
RosettaNet标准有三个组件:
- 合作伙伴接口流程(PIP)
- 字典
- RosettaNet实现框架(RNIF)
PIP是进行特定业务活动的标准消息和choreography的规范。字典标准化消息中所用的词,RNIF包含确保存在于消息交换中的可信度和安全性的规范。我们感兴趣的是从RosettaNet中选择相关的组件并在Web服务环境中加以实现。在这篇文章中,我仅着重讲解如何理解PIP规范以及您可以使用其中的哪些组件。
RosettaNet PIP
RosettaNet PIP为常见的业务活动创建标准的电子商务对话,如订单和库存管理、运输、销售预测等。PIP按照功能组织成逻辑段(segment)和群集(cluster)。例如,在这个例子中要进行的电子商务对话是PIP3A4购买订单请求(Purchase Order Request),它属于Order Management cluster(订单管理群集)中的Quote and Entry Segment(引用和条目段)。所有的PIP可以从RosettaNet的网站上公开下载得到。
PIP规范包是压缩的文件,包含了三类文档。规范本身是一个Word文档,消息的帮助和指导是HTML文档,消息结构和内容包含在XML DTD中。对于电子商务对话,我将从PIP3A4规范的Word文档中的UML图和相关的表中摘录流程定义和choreography信息。我也将使用DTD来帮助创建消息和操作。
仔细查看
图3,您可以看到Request Purchase Order PIP是如何工作的。合作伙伴交换了两个消息和两个收据;这两个消息是Purchase Order Request(购买订单请求)和Purchase Order Acceptance(购买订单接受),在消息签发和接收之间,有收据确认签名。
我将对作为WSDL操作的消息进行建模。在PIP包中缺少的部分是收据消息的DTD。由于这种消息对所有PIP是通用的,所以它成为实现框架的一部分,我将简单地将它从RNIF包中(也可以从RosettaNet网站上下载,参见
参考资料)抽出。
要对作为WSDL操作的PIP收据和消息进行建模,我需要将DTD转换成XML
Schema文档。这是一项简单的任务,因为大多数XML编写工具能够为您进行这样的转换。然而,RosettaNet规范中的DTD有一个小问题,它是由于元素的一个不正确的对象模型引起的;每个DTD看上去像一个单独的模型而不是一个大模型的一部分,因而在不同的DTD中,元素有时会重复或重新定义。虽然在RosettaNet环境中,它不是一个大问题,但是在实现Web服务时,需要将这些DTD中的模式组合到同一个文档中。RosettaNet已经承诺当他们推出重新建模的具有很好连接的模式时,这些问题将不会再出现。在两个转换到Schema的DTD中,我将一个对象手工重新命名,并修改引用以解决这个问题。在提起了我要用在电子商务对话中的消息之后,我的第一步操作就是将这些消息转换到Web服务的操作中。下一步操作将是根据BPEL4WS定义对电子商务对话进行定义。
将RosettaNet映射到WSDL和BPEL中
由于在developerWorks(开发者园地)上现在已经有几篇介绍WSDL的文章(参见
参考资料),我将假定您熟悉WSDL。RosettaNet PIP和WSDL的之间映射如下所示:
- RosettaNet消息DTD包含消息中用到的类型,并且这些元素映射到WSDL的类型定义。
- RosettaNet消息定义(包括消息名)映射到WSDL中的消息定义。
- RosettaNet PIP中的动作映射到WSDL中的操作。
- RosettaNet PIP中的合作伙伴角色映射到BPEL4WS中的Partners(合作伙伴)。
- RosettaNet PIP中的choreography是在BPEL4WS内抽象和可执行业务进程的Choreography中进行实现的。
- RosettaNet RNIF中的异常消息映射到BPEL4WS的异常处理机制。
一些概念没有RosettaNet和BPEL4WS之间的直接映射,需要进行如下工作:
- RosettaNet中的消息交换控制参数(重试的次数,完成一个活动的小时数等);需要进行的工作是在业务流程描述之外约定这些问题。
- RosettaNet RNIF消息传递层提供了打包和解包消息以及用安全可靠的方式传输它们的方法。BPEL4WS和WSDL范例提供了它自己的方法来编码、传输和保护消息。需要进行的工作是Web服务范例中使用RosettaNet中的最优方法。
- RosettaNet提供了电子商务对话的第三方视图,而BPEL4WS从某一方的角度对电子商务对话进行编码。对于业务合作伙伴而言,需要进行的工作是从特定的角度创建电子商务对话,然后再创建并约定其镜像。
在另一方面,BPEL4WS提供了以下RosettaNet还不具有的高级功能:
- 通过在对话中包含几个伙伴来合成大型电子商务情景的能力。
- 像WHILE和SWITCH
这样的逻辑语句,提供了灵活的业务流程,可以根据特定的情况改变流程
- 能够将后端系统连接到业务流程中
- 一组用于创建复杂工作流的健壮控制活动
RosettaNet和BPEL4WS是相互竞争的吗
尽管RosettaNet和BPEL4WS有某些地方是一致的,但是它们肯定不是竞争对手。它们非常适于以强大的组合形式一起进行使用,可以把BPEL4WS用作定义电子商务流程的语言,而将RosettaNet用于创建标准化的电子商务流程。这样,一方可以弥补另一方的短处,因而不会直接竞争。
在RosettaNet中,电子商务对话是用UML活动图、文本表和XML文档进行定义的。现在,RosettaNet并不使用全部电子商务规范语言(它可以用来表示整个电子商务对话)。RosettaNet急于探索采用标准的电子商务流程定义语言来描述它的电子商务流程,而BPEL4WS可能是它正在寻找的有用候选者。
在另一方面,BPEL社团也可以从使用RosettaNet中得到极大的好处,因为RosettaNet将为BPEL提供行业专家构建和使用的确实可靠的电子商务对话。RosettaNet PIP和BPEL4WS在概念上的功能是互补的,同时使用它们将肯定会丰富Web服务的定义。
结论
在本文中,我已经讨论了一些在Web服务中创建和使用真实的电子商务对话所遇到的挑战,以及BPEL4WS如何解决它们。我介绍了RosettaNet的规范以及如何使用它们。我在抽象的层次上演示了如何将RosettaNet映射到WSDL和BPEL4WS,并通过讨论RosettaNet 和BPEL4WS的互补本质来结束本文。本文属于概述性的,不过下面的二篇文章将包含许多代码。后续的文章将会介绍如何用RosettaNet PIP3A4和BPEL4WS创建一个扩展的电子商务情景。
参考资料
关于作者
对本文的评价
|