内容


Web 服务的对话支持:下一阶段的 Web 服务的抽象

使用这项 alphaWorks 技术来构建您的动态电子商务

Comments

最近,IBM、Microsoft 和 BEA 宣布了一组用于使 Web 上的业务流程自动化的 Web 服务标准:

  • Web 服务的业务流程执行语言(Business Process Execution Language for Web Services,BPEL4WS),用于业务流程的可执行规范
  • WS-Coordination(WS-C),为分布式应用程序的操作的协调指定了可扩展框架
  • WS-Transaction(WS-T),介绍了与 WS-Coordination 中描述的框架一起使用的协调类型

此外,IBM 通过 alphaWorks 提供了被称为 Web 服务的对话支持(Conversation Support for WebServices,CS-WS)的技术,用来支持分布式自动系统间交互的对话模型。本文的目的在于勾勒出这些补充技术一起被用来启用动态电子商务的远景。在读完本文后,您将理解这项新兴的技术能解决的那些问题,您将可以下载来自 alphaWorks 的 CS-WS 软件包并开始研究它的代码。下面的 参考资料部分中有这个软件包和本文中引用的其他离站资料的链接。

我们先非常简要地讲述与我们的讨论有关的技术。然后,我们介绍一个旅程预订情景并描述如何把我们在这里讨论的技术用于构建复杂程度各不相同的 Web 服务。最后,我们总结对话模型所带来的补充功能。

技术概述

在这部分中,我们将简要地讨论本文中涉及的各种技术。请参阅下面的 参考资料,其中有所有这些技术的更详细的信息。

BPEL4WS 是构建平台无关的、分布式、灵活的业务流程应用程序的重要的一步。它所建立的基于 XML 的语言可用于把业务流程的流逻辑指定为一组活动以及这些活动间的控制相关性。BPEL4WS 流程把它的功能具体化为 Web 服务并使用其他 Web 服务来提供这种功能。

WS-Coordination 所描述的可扩展框架提供了协调分布式应用程序的操作的协议。通过使用 WS-Coordination,在异构环境中运行的分布式应用程序可以创建把活动传播给其他服务和注册协调协议所需的上下文。

WS-Transaction 规范描述了两种 协调类型,一种是 原子事务(atomic transaction,AT),另一种是 业务活动(business activity,BA)。两种类型与 WS-Coordination 规范中描述的可扩展协调框架一起被使用。一种协调类型指定了一组协调行为。原子事务被用来协调持续时间较短的活动,而业务活动被用来协调持续时间较长且涉及处理业务异常的业务逻辑的应用程序的活动。

Web 服务的对话支持

Web 服务的对话支持(Conversation Support for Web Services,CS-WS)提出一组规范,用以支持使用 Web 服务的组件集成的 对话模型。(请参阅下面的 参考资料,了解更多对话模型。)这些规范包括一种用于描述对话交互的 XML 语言,被称为 对话策略(Conversation Policy,CP)。CP 是预先编制的交互模式或协议并被用来指定定义交互协议的消息格式、顺序约束和定时约束。这组规范中的其他规范在系统级和应用程序级扩展了 Java 连接器体系结构 API,以提供在 J2EE 应用程序服务器上执行 CP 的标准的运行时框架。

前面已提到,您可以从 IBM 的 alphaWorks 站点获得 CS-WS 的原型实现;请参阅 参考资料中的一个链接。

技术的使用:一个真实的示例

我们将使用大家熟悉的旅程预订情景来说明这些新技术是如何简化动态电子商务系统的开发的。我们将描述如何使用我们所考虑的技术来构建各种复杂度的 Web 服务。我们先从简单的情景开始说起,在这个情景中,现有的 WS 技术协议栈(WSDL、UDDI 和 SOAP)是够用的。接着,我们增加要求,使得我们有必要使用 BPEL4WS、WS-C 和 WS-T。最后,我们讨论对话与所有其他这些技术结合时可以扮演的角色。

第 1 阶段:使用标准的 Web 服务协议栈

为了进入 Web 服务时代,Acme Travel 提供用于发送旅程预订请求的可通过网络访问的服务。这个服务的定义用的是 WSDL,这个服务在 UDDI 中发布并有关联的 SOAP 绑定。通过编写程序从客户的业务应用程序中访问这个服务,客户的 IT 系统可以与 Acme 集成。

这个服务的实现仅仅是把请求存储在数据库中并向 Acme Travel 的有关人员发送警告。这些 Acme 雇员执行完成预订的必需步骤并通过电子邮件把电子票券寄给客户。

第 2 阶段:添加流程自动化和伙伴集成

为了添加流程自动化和伙伴集成的支持,Acme 把 BPEL 引擎添加到他的 IT 基础结构并添加 BPEL 流程来使长期运行的事务自动化,下面我们来看一下发生的变化。BPEL 流程提供了 Acme 向它的客户公开的 Web 服务的实现。为了添加与航空公司、汽车租赁和宾馆等伙伴的集成,BPEL 调用它们所提供的 Web 服务并使 Acme 的伙伴在恰当的时候调用 Acme 的 Web 服务。

核心的 BPEL 预订流程使这一切成为可能。在接收到预订请求之后这个流程的实例被创建。这个流程协调涉及完成单个旅程预订的各种活动。这包括调用航空公司、汽车租赁公司和宾馆所提供的服务、把信息存储到合适的数据容器、处理异常并在必要时调用补偿。

第 3 阶段:添加对话支持

通过使用 BPEL4WS,Acme 的业务流程集成现已取得很大的成功,使 Acme 的业务增长很快。于是,Acme 遇到几个有意思的新情况,我们将在下面几部分中考虑这些情况。

对话简化了反复的流程

Acme 已发现,对于许多客户来说,通过 Web 服务来预订旅程并不是一次性完成的。客户进入反复的讨价还价的过程:他们提交请求,考虑他们为原先的请求 所被收取的价格,作出调整以获取更优惠的价格,重新提交请求,如此反复。从本质上说,客户与旅行社在进行 对话。Acme 可以仍旧把核心 BPEL4WS 流程用于流程的自动化,但是这个公司需要另一个位于服务接口之外的与客户对话的模块。这个模块看到 Acme 从客户那里接收到的消息,解析消息头,再根据对话状态和头信息把它传递给合适的处理程序。接着,处理程序把消息发送给正确的 BPEL4WS 流程。

我们的对话模块被用作 BPEL4WS 流程的代理。Acme 想以灵活的方式来实现这个模块,正如 BPEL4WS 使得业务流程应用程序极其灵活。Web 服务的对话支持提供了灵活地构建这个模块的技术,以补充 BPEL4WS。

对话简化了反复的流程

Acme 已注意到它的一些业务伙伴相当频繁地更改它们的 Web 服务接口。这意味着 Acme 用来连接到这些伙伴的端口类型也要更改。有时候,Acme 自己也需要更改它自己的端口类型。在 Web 服务所连接的世界中,任何类似的更改都将带来问题。Acme 和它的伙伴所需的是以非干扰的方式引入这些更改的机制。从本质上说,它们可以相互公开它们的 Web 服务而不必把每个服务紧密连接到某个类型。它们相互公开的接口仅仅指定了消息头和一般的消息体。如果业务伙伴更改了它发送给 Acme 的消息的格式,那么它还提供用于接收、解析和再次格式化新的消息格式的可下载的 策略和关联处理程序。Acme 的对话模块使用现有的接口来接收新消息、下载新策略并顺利地处理更改。其他伙伴可以继续使用旧格式。

Web 服务的对话支持提供了可适应的、可扩展的 B2B 集成机制,以补充 BPEL4WS。

对话简化了反复的流程

Acme 成功应用 BPEL4WS 的另一个影响是现在更多的伙伴(例如汽车租赁公司、航空公司和连锁宾馆)想通过 Web 服务和 Acme 的内部流程集成。虽然这些伙伴的核心内部流程是相同的,但是它们使用不同的业务协议。Acme 需要一个核心 BPEL4WS 流程可以调用的模块,这个模块应该有能力根据目标伙伴来选择合适的业务协议、根据选择的协议来格式化消息并为了执行协议而管理与伙伴的对话。

Web 服务的对话支持为增量地构建这个模块提供了技术,以补充 BPEL4WS。

对话简化了协议的嵌套

Acme 照例添加了季节性促销组合。例如,它提供的超级碗(Super Bowl)套餐中除了有常规的机票、汽车和宾馆的预订外,还有比赛、聚会和其他庆典的票券。这将更改业务协议。Acme 需要一种通过 协议嵌套来扩展现有的业务协议并添加新协议的机制。超级碗票券的请求被嵌套在常规旅程的请求中,饭馆预订的请求被嵌套在超级碗预订的请求中,以此类推。

Web 服务的对话支持为实现用以补充 BPEL4WS 的嵌套的、可组成的协议提供了开放的机制。

对话可以支持有状态的消息交换会话

客户是挑剔的。Acme 当然知道这一点,但是,一旦公司的自动化系统投入使用,客户的挑剔将成为现实的问题。客户常常发送新的请求,在预订完成前更改它,在预订完成后再次更改它,取消一部分请求 ― 只是为了不再使用票券,相反还要请求退款。有时候,这个流程是循环的,在反复几次后事务才完成并归档。Acme 发现更好的作法是从头到尾以处理单个会话的方式来处理与客户的消息交换,显式地维护对话的状态并根据状态和消息内容对消息操作。BPEL4WS 提供了流程自动化的能力而对话模块处理了与客户的有状态的消息交换。

Web 服务的对话支持提供了可以驱动与客户之间的有状态的消息交换会话的能力,同时补充了 BPEL4WS。

在应用程序层次结构中,对话适合于放在什么地方?

Frank Leymann 和 Dieter Roller 在最近的一篇文章(请参阅 参考资料中的一个链接)中讨论了 基于流程的应用程序。他们讨论了一个有两层的应用程序结构:底层由一些功能组件组成,上层则由应用程序的流逻辑组成。这种方式具有几个软件工程上的优点,最显著的优点是具有适应对应用程序的更改的灵活性,这是因为把功能模块和代理这些模块的流逻辑分离开来了。另一重大优点是易于开发,因为这些层可以被独立地开发和测试。最好是把上层看作 组件代理层,因为这一层中的流逻辑负责代理底层中的组件以提供整个应用程序的功能。

对话模型在流逻辑上引入了第三个层,从而使这种办法更进了一步。这个层称为 流程代理层,因为它代理组件代理层(它现在位于中间那一层了)中所定义的流程以提供新的功能。在要连接自主实体的分布式应用程序中,流程代理层尤其有用。 流程代理维护一个独立于流程状态的对话状态,并根据对话状态代理消息。流程代理执行模块化的业务协议。

图 1显示了这个应用程序结构。底层通过 WSDL 进行表达,中间一层用 BPEL 来表达,顶层则通过对话策略进行表达。

图 1. 应用程序层次结构
应用程序层次结构

图 2显示了运行时的情况。对话支持和 BPEL 支持是 J2EE 应用程序服务器中的插件。对话支持被定位成用于构建对话性 JCA 适配器的、未来的 J2EE 扩展。如上所述,对话策略是用来配置这些适配器的 XML 文档。WSIF(Web Services Invocation Framework,Web 服务调用框架)框架可以与应用程序服务器一起被用来调用 Web 服务,这种调用与传输协议的某个绑定无关。WSIF 支持几种常用传输协议的绑定。

图 2. Web 服务中的对话支持补充 BPEL4WS
Web 服务中的对话支持补充 BPEL4WS
Web 服务中的对话支持补充 BPEL4WS

结束语

BPEL4WS、WS-Coordination 和 WS-Transaction 与 WSDL 和 UDDI 一起提供了动态电子商务的编程模型的基础。正如我们的示例所说明的,对话给这个模型带来的重要的、起补充作用的功能包括:

  • 动态的、灵活的交互模式,对话技术能够支持 Acme 和客户之间的复杂交互说明了这一点。

  • 可适应的、开放的、可扩展的 B2B 集成能力,对话模块能够适应接口更改证明了这一点。

  • 增加对话模块作为流程代理层,它用来处理伙伴用来提供 BPEL 流程期望的业务服务的多个流程协议。例如,不同的汽车公司可能使用不同的协议来预订;对话模块支持在使用相同 BPEL 流程的同时为每个伙伴选择正确的协议。

  • 根据显式对话状态进行消息处理。旅行预订示例展示了一个很好的示例,在这个示例中,完成一个事务之前可能会在对话级别上发生几个循环和状态更改。

  • 可执行业务协议、嵌套的协议以及协议切换,如超级碗情景中所演示。

既然您对于对话能解决哪些类型的问题已经有所了解,那您可以到 alphaWorks 查看一下 CS-WS 软件包了。这是一项新兴技术,所以非常欢迎您的反馈。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=SOA and web services
ArticleID=20723
ArticleTitle=Web 服务的对话支持:下一阶段的 Web 服务的抽象
publish-date=02012003