【IT168 技术文档】由于众多原因,企业服务总线 (ESB) 是任何企业级 SOA 必不可少的一部分。
随着实施面向服务结构建能够将服务编制为端到端业务流的灵活且标准的业务流程。
该系列文章的前几部分描述了如何利用最新的标准和体系结构方法为后端应用程序提供服务,并在企业服务总线 (ESB) 上发布这些服务。但所有这些服务只能在访问它们的客户端和业务流程的上下文中使用。本文关注如何构建能够将服务编制为端到端业务流的灵活且标准的业务流程。
业务流程是实现业务功能所需的一系列步骤。业务流程可能包括企业内或企业间的系统交互和/或人工交互。出于一致性或合规性目的,一些企业只记录他们的业务流程。然而,在过去几年中,我们看到越来越多的组织使用 IT 系统自动执行和监控其业务流程。我们认为,越来越多的人采用业务流程管理 (BPM) 的主要原因之一是,出现了能够被广泛接受的标准(例如,WS-BPEL)来实现和执行业务流程。
图 1 用于定单处理的 BPEL 流程示例
在“精通 SOA”系列的这部分中,我们将描述如何使用这些标准,并结合 Oracle 供应商和 Monster Worldwide 的经验以及生产中若干个成功的 Oracle 企业服务总线和 Oracle BPEL 流程管理器的面向服务体系结构 (SOA) 实现,来面对业务流程编制的挑战。
Monster Worldwide
Monster Worldwide 已经确定 BPEL 是一个重要标准,因为 SOA 和 BPEL 不仅能够提供成为全球标准所需的敏捷性和可扩展性,同时还能满足客户的本地业务需要。此外,BPEL 由若干个 IT 行业公司支持的标准化委员会推动,从而最小化了由选择专用集成平台而带来的供应商束缚风险。
随着 Monster Worldwide 应用程序的不断增多,需要使用 Web 服务和 SOA 将这些应用程序互联。它通过将接口以标准方式公开给现有系统来发布服务,从而利用 Web 服务标准,例如,SOAP、WSDL 和 XML Schema。然后,Monster Worldwide 可以将这些服务编制为端到端业务流。BPEL 是此类编制的行业标准。
在本文中,您将看到关于 Monster 如何实现 SOA 和 BPEL 的示例,以及来自其他 Oracle 客户的 SOA 实现的提示和技巧。您还将学习 BPEL 标准的特性,它如何适应 SOA 空间中的其他标准,以及 Oracle SOA 套件如何提供实现这些标准的基础架构。
BPEL 基础知识
BPEL 定义了一个基于 XML 的语言,用于指定基于 Web 服务的业务流程行为。第一个公开的 BPEL 规范在 2002 年 7 月发布(即 BPEL4WS 版本 1.0),它结合了 IBM 的 Web 服务流语言 (WSFL) 和 Microsoft 的 XLANG 规范。版本 1.1 于 2003 年发布,是由许多业界供应商协作完成的,而 WS-BPEL 标准的 2.0 版预计将由 OASIS 标准机构于 2007 年初发布。
BPEL 标准将企业业务流程的互操作性和可移植性提高到一个前所未有的程度。互操作性使运行在不同业务流程引擎上的业务流程能够彼此交互,以及与多个供应商和开源平台发布的服务交互。能够实现这一点是因为 BPEL 基于较低级的 Web 服务堆栈 — 即 SOAP、UDDI、WS-Addressing、WSDL、XML、XML Schema 等。业务流程方面的互操作性已经实现多年了;然而,BPEL 和 Web 服务标准可将其带入下一级别。继互操作性概念之后,业务流程的可移植性概念则是全新的。BPEL 提供的流程可移植性确保您可以使用支持该标准并可以运行在任何兼容系统上的工具定义业务流程。如今,您可以从较大的平台供应商(例如,Oracle 和 IBM)获得 BPEL 引擎,也可以从较小的特定供应商和开源公司获得。
编排和编制
实现业务流程的运行时生命周期需要执行多个活动。BPEL 是一种 Web 服务编制语言,不同于流程编排。流程编排(IT 界常用术语)可描述多个贸易伙伴为了实现多组织业务功能而进行的交互。例如,在供应链方面,实施产品采购可能涉及到多家公司的定单、发货通知单和资金的交互。编排不描述每个公司如何处理操作,只描述不同公司如何彼此交互。
流程编制使用一个中心流程来协调不同的 Web 服务操作。这个中心“指挥家”(就像在管弦乐团一样)了解编制的总体目标、涉及的操作以及操作的调用顺序。这种集中化管理使 Web 服务能够在不了解彼此影响的情况下进行添加和删除,还允许在出现错误和异常的情况下进行补偿。
流程编制和流程编排仅在描述服务接口和交互方面类似。对本文而言,我们将关注流程编制。当您使用 BPEL 进行编制时,BPEL 语言将提供一个标准来控制整体操作序列、调用服务以及在 BPEL 服务器上执行。
Monster Worldwide 最复杂的一项集成工作是开发一个从 Oracle 的 Siebel 客户关系管理 (Siebel CRM) 到 Oracle 电子商务套件的定单-发票集成。这些要求包括将初始定单消息(一个 Siebel 生成的对象,包括定单和客户数据)分为两个消息,转换这两个消息中的数据,以及在将消息发送到 Oracle 电子商务套件之前丰富定单数据。此外,需要在发送客户定单之前在 Oracle 电子商务套件中创建客户配置文件。我们将构建一系列 BPEL 流程来协调这些步骤的执行。收到 Siebel 定单对象之后,第一个服务将对象分为两个消息,即客户和定单。然后,编制将并行增强该定单和客户数据。转换定单数据之后,将其传递到演练整个定单数据增强功能的服务。完成后,编制将客户消息发送至 Oracle 电子商务套件,并等待成功响应后再发送定单消息。该编制可确保 Monster 的所有活动按预期序列发生,并确保在该过程中遇到错误时进行正确的补偿。
BPEL 框架
BPEL 是一个强大的语言,允许使用 Web 服务组件开发复杂的业务流程。BPEL 流程可指定调用哪些 Web 服务以及调用的顺序。BPEL 服务器跟踪事务中涉及的业务流程;确保这些步骤以正确顺序执行;并管理事务、补偿和异常。
BPEL 支持来自任何编制语言的所有控制流结构:循环和条件、变量,分配数据值,定义错误处理程序,等等。BPEL 接收活动用于定义当客户端通过服务接口首次调用它时将创建业务流程实例的事件或消息。然后该流程将调用其他服务(定义的业务流程序列中的活动)。通常将生成一个响应(回复)。
其中,BPEL 流程可能必须操作数据变量(赋值),处理错误和异常(引发)或等待一段时间。最后,该流程可以在任意时刻结束(终止)。
该元素变量定义在整个流程描述中使用的所有消息和数据。变量用于发送到涉及的服务或从它们接收的每个消息。它们用于与任何编程语言相同的方式处理流程执行。
结构化活动可能包括按顺序(序列)执行活动或并行(流)执行活动的 BPEL 编制。以下是 BPEL 中最重要的一些控制流活动:
switch — 基于条件选择路由
while — 等待特定条件的满足
pick — 等待接收若干消息之一
BPEL 可以基于条件行为定义业务流程异常。例如,将 Monster 按区域划分:北美、欧洲和亚太地区。根据定单的来源区域,BPEL 流程执行区域特定的逻辑。
同样,Monster 已经定义了定单-发票 BPEL 流来并行处理客户和定单,同时按顺序处理定单服务。
BPEL 处理编制服务 (partnerLink),该服务可为该流程与之交互的各方定义接口。这些 partnerLink 包括 BPEL 流程和该接口(客户端通过该接口调用 BPEL 流程自身)调用的服务。BPEL 流程灵活绑定到物理服务端点可以在设计、部署或运行时进行。对于上面描述的服务,Siebel 和 Oracle 电子商务套件适配器是我们的关键 partnerLink。
BPEL 具有对异步事件的丰富支持。BPEL 流程可以等待在任何时候从客户端(同样的 BPEL 接收活动用于实例化新的流程实例)接收消息或请求。BPEL 引擎将处理保持流程状态的开销,直到该消息传入并将消息与特定流程实例相关(通过标准 WS-Addressing 或自定义相关机制)。
BPEL 流程自身可将同步或异步接口公开给它们的客户端。同步 BPEL 流程操作锁定客户端直到流程返回对客户端的响应。异步 BPEL 接口可以是单向的(“即发即弃”),或通过回调返回对客户端的响应。异步流程常用于较长期运行的操作,而同步常用于较短期运行的操作。
在 Monster,上面描述的定单-发票流程是长期运行的异步流程。除了上面描述的逻辑,Oracle 电子商务套件中创建的发票号通过回调返回到 Siebel,如果发生异常,异常处理过程包括人工流程。