Oracle SOA 套件最佳实践

实现 Oracle 集成 B2B 和 Oracle BPEL 流程管理器的互操作


作者:Jeffrey Hutchins,电子商务策划师,Oracle SOA 套件产品经理

2006 年 12 月发布

背景

从业务角度而言,无论是在企业内扩展业务流程还是将其扩展到供应链,您都必须妥善处理两个基本的东西:数据和流程。每个端点都将有其自己的表示,企业到企业 (B2B) 也不例外。在 B2B 领域,一般需要说明的是:

  • B2B 是以文档为中心的。
  • 在企业级别,文档是异步的。
  • 头信息不包含在有效载荷中。
  • 不保证排序。
  • 有多个文档标准。
  • 实施时,每个标准均存在多个变种。

因此,当流程从 B2B 网关接收文档或向其发送文档时,它必须能够:

  • 识别文档
  • 管理多个文档
  • 管理文档差异
  • 关联多个文档
  • 管理错误

在本篇技术说明中,将以“订单到现金”流程中的两个事务集(文档)为例:购买订单:出站支付:入站

文档管理

流程如何识别文档?

文档通过 Oracle 高级队列(IP_IN_QUEUE 和 IP_OUT_QUEUE)在集成 B2B 和 BPEL 流程管理器间进行交换。在集成 B2B 中,这些队列称为内部传送通道 (Internal Delivery Channel)。在 BPEL 流程管理器中,可通过 Partnerlink 访问这些队列。

集成 B2B Routing Id 每个文档定义都指定有一个供 AQ 用户使用的唯一路由 Id。默认值为 B2BUSER
BPEL 流程管理器 Partnerlink 每个 partnerlink 都指定有一个“Consumer”。流程可识别将由 Consumer 取消排队的文档。

流程从 B2B 网关接收文档(入站)。将 AQ consumer 和 routing_id 设为 820_PAYMENT。如此,流程将能够识别入站文档。

支付 入站
集成 B2B:文档定义
Routing id = 820_PAYMENT
BPEL 流程管理器:AQ 适配器
Consumer =

流程向 B2B 网关发送文档(出站)。将 AQ recipient 设为 B2BUSER,将 routing_id 设为 <blank>。如此,流程将能够传递出站文档。

购买订单 出站
集成 B2B:文档定义
Routing id = <blank>
BPEL 流程管理器:AQ 适配器
Recipient = B2BUSER

多个流程使用一个文档(入站/出站)。要使流程能够识别入站文档,将 AQ consumer 和 routing_id 设为 850_PurchaseOrder。要使网关能够识别出站文档,将 AQ recipient 设为 B2BUSER 并忽略 routing_id。

购买订单 出站
集成 B2B:文档定义
Routing id = 850_PurchaseOrder
BPEL 流程管理器:AQ 适配器
Recipient = B2BUSER
入站
集成 B2B:文档定义
Routing id = 850_PurchaseOrder
BPEL 流程管理器:AQ 适配器
Consumer = 850_PurchaseOrder

流程如何管理文档差异?

即使只使用一个标准,文档也会存在差异。实施者可以:

  • 遵循标准
  • 在规范内应用差异(添加代码、更改必填/可选字段、更改数据的放置/语义等)
  • 应用扩展
  • 将文档从规范中剔除 —“一次性”文档

解决同一标准中存在的差异。在理想情况下,每个参与方都应遵循标准,但实际上,差异会经常出现且必须包容这些差异。在端到端集成中保留这些差异将造成不可伸缩和不可重用;然而,如果使用超集 XML 模式,则是最佳做法。该方法将给予您最大的灵活性。

集成 B2B
  • 选项 1:保留支持验证的原始定义
  • 选项 2:利用禁用验证的超集 XML 模式
BPEL 流程管理器
  • 利用超集 XML 模式
  • 验证 XML 实例
  • 通过使用 IP_MESSAGE_TYPE 数据识别贸易合作伙伴调用适当的 XSLT 映射

使用 BPEL Pick 流程活动

如果超集 XML 模式无法表示文档中的差异,或企业要求规定业务流程管理多个标准和/或端点,那么,创建多个 partnerslink 并利用 Pick 活动:

  1. 在 Pick 活动内使用 On Message 活动来管理每一个 partnerlink 交互。
  2. 将标志(布尔变量)设置为支持流程识别相应的流。
  3. 使用 IP_MESSAGE_TYPE 提供的信息调用适当的 XSLT 映射。(技术说明稍后部分有述)

集成 B2B 定义支持验证的原始文档
BPEL 流程管理器
  • 为每个文档定义单独的 partnerlink
  • 为每个 partnerlink 定义 Pick 流程活动(设置流程流的标志并调用 XSLT 相应的映射)


Oracle 应用程序开发框架 (ADF)

本技术说明着重关注建模,而不是编码和建模的最佳实践。注意:该适配器框架中具有支持文档识别、指定 XSD 以及从编码角度启动流程或流程步骤的功能。更多详细信息,请参阅应用程序开发框架开发人员指南 10g 版本 (10.1.3.0)(第 1 章和第 20 章)中的这一主题。

为什么要建立公用数据模型?

要避免导致 nn-1 情况出现的点到点映射,可建立公用数据模型来表示业务对象 — 例如购买订单和支付。该最佳实践需要许多前期工作,但最终将得到一个可伸缩的灵活解决方案。安装基于该模型的规范 XML 模式可使每个端点系统映射到一致的目标(在本例中为购买订单和支付文档)。

流程管理


流程如何关联多个文档?


如前所述:
  • B2B 是以文档为中心的。
  • 在企业级别,文档是异步的。
  • 头信息不包含在有效载荷中。
  • 不保证排序。

因此,当流程从 B2B 网关接收消息时,它必须能够按有效载荷中的内容关联文档。

  • Oracle AQ consumer 识别文档,而关联识别正确的流程实例。例如:将启动文档采购订单与响应文档支付相关联。
  • 在 BPEL 流程管理器中,可通过创建关联集来完成该任务。(注意:要执行关联,有效载荷中必须存在唯一标识符。)
  • 根据流程的复杂程度,可能需要多个关联集。

文档关联:步骤
  1. 创建关联集。
  2. 创建属性。
  3. 创建属性别名。

关联集 关联集名称 PO_Payment_Cor_Set
属性 保存值的变量 PO_Payment_Value
属性别名

xPath:提取 PO 值 /ns2:PurchaseOrder/ns2:PO_Number
xPath:提取 PO 值

/ns4:Payment/ns4:PO_Number

在本例中,PO Number 是用于关联启动和响应文档的唯一标识符。

流程如何获取有关文档的信息?

如果要将业务流程扩展到企业之外,则必须确定并解决 B2B 标准/协议和企业内使用的标准/协议之间的差异:


将流程扩展到企业之外 (B2B)
在企业内扩展流程 (EAI / A2A)
安全性 良好的定义和认证 选项各不相同
传输 良好的定义和认证 选项各不相同
文档 标准(头和有效载荷) 通常为 B2B(仅有效载荷)
合作伙伴信息 本身固有 用户定义/协议相关
头信息 本身固有 用户定义/协议相关

Oracle 集成 B2B 提供的结构带有可填补这些差距的信息。IP_MESSAGE_TYPE 是一个支持在这些组件中进行交互的头。

出站

在 BPEL 流程管理器中设置 使集成 B2B 可以识别协议
入站 在集成 B2B 中设置 提供 BPEL 流程附加信息

IP_MESSAGE_TYPE(示例)

字段 说明
Msg_Id

文档的唯一标识符
  • 由贸易合作伙伴指定的 GUID(入站文档)
  • 由中间件流程指定的 GUID(出站文档)
Inreplyto_Msg_Id

响应前一个文档时收到的 MSG_ID。如果中间件由文档启动,则指定为 Null。
在响应前一个文档时指定为 MSG_ID。

From_Party 发送文档的贸易合作伙伴。
To_Party 接收文档的贸易合作伙伴。
Action_Name 定义文档可为 null 的业务操作。
Doctype_Name 文档类型,如集成 B2B 示例中定义所示: “850”
Doctype_Revision 文档修订,如集成 B2B 示例中定义所示: “4010”
Msg_Type 指定为 1, 2, 3(请求|响应|确认)
Payload 在流程中指定
Attachment 在流程中指定


错误处理


应创建错误处理流程以降低所有端点中的错误率。B2B 网关提供了许多错误信息源。利用该信息,可创建集中的错误流程来解决业务与合规性要求方面的问题。这些结构是:
  • IP_EXCEPTION:出现错误时,IP_EXCEPTION 数据将被发送回使用 consumer B2BERRORUSER 的流程。
  • IP_MESSAGE_TYPE:错误出现时,IP_MESSAGE_TYPE 将提供基本信息。
  • b2b_InstanceMessage:该运行时信息库的公共视图可提供每一个转换的详细信息。这些结构的唯一键是 b2bMessageId
利用该信息,错误流程可精确地识别出错误类型并启动相应的业务流程。

IP_EXCEPTION(示例)

字段 示例
correlationId null
b2bMessageId A9FE198110F30698B9B0000014B6C510
errorCode AIP-50079
errorText Transport error:[IPT_HttpSendConnectionRefused] HTTP connection is refused.Connection refused:connect
errorDescription Transport error:[IPT_HttpSendConnectionRefused] HTTP connection is refused.Connection refused:connect
errorSeverity 2

IP_MESSAGE_TYPE(示例)

字段 示例
Msg_Id A9FE198110F30698B9B0000014B6C510
Inreplyto_Msg_Id
From_Party Acme
To_Party GlobalChips
Action_Name Exception
Doctype_Name Exception
Doctype_Revision 1.0
Msg_Type 3
Payload
Attachment

DB 视图:b2b_InstanceMessage(结构)

字段 说明
id 系统生成的消息 id。
referToId 父消息的 id,如果有(id 850、855 等)。
b2bMessageId 发送或接收消息时消息中使用的 ID。
receiverId 接收方 id 类型和值。例如:DUNS 987654321
senderId 发送方 id 类型和值。例如:DUNS 123456789
senderName 发送方名称。例如:Acme
receiverName 接收方名称。例如:GlobalChips
acknowledgeMode Sync/Async(同步/异步)。
messageDateTime 为从后端系统接收的消息或向其发送的消息添加时间戳记。
messageType 消息类型,如 Request/Acknowledgment
state 消息状态,如 Complete/Error
remainingRetry 剩余尝试次数。
direction 该消息的方向。例如:Inbound/Outbound(入战/出战)
timeToAck 确认时间(分钟)。
errorCode 是否有错误要处理,例如:AIP-11111
errorText 是否有错误要处理。
errorDescription 是否有错误要处理。
protocolMessageId 用于根据协议关联消息。
documenttype 该消息的文档类型。例如: 850 1.0
b2btimestamp 传输线路上发送或接收到消息的时间戳。
conversationId 用于关联 2 个以上的消息。
protocolworkarea 用作该消息的临时存储。
correlationId 用于关联 2 个消息。
transactionControlNumber 事务控制号。例如: 1001
groupControlNumber 组控制号。例如: 1001
interchangeControlNumber 交换控制号。例如: 1001
agreement 该消息的协议 id。
documentProtocol 该消息的文档协议。例如:X12 4010
exchangeProtocol 该消息的交换协议。例如:AS2 1.0
transportProtocol 该消息的传输协议。例如:HTTP 1.1
url 该消息的发送传输 URL。例如:http://machine:port/b2b
payload 未打包的有效载荷。
wirePayload 打包的有效载荷。


结论

在传统观念中,企业到企业集成与 SOA 理念背道而驰,完全不同于所有其他类型的集成。事实上,若要成功实施任何一个集成项目,该集成必须以解决方案为基础、由业务要求驱动并涉及整个端到端解决方案。B2B 只是另一个端点。

总而言之,要将流程扩展到企业之外,该流程必须能够:
  • 识别文档
  • 管理多个文档
  • 管理文档差异
  • 关联多个文档
  • 管理错误
本技术说明介绍了一些实现这些目标的技术。
您可在 SOA 套件论坛集成 B2B 论坛中探讨该技术说明。

Jeffrey Hutchins 是 Oracle SOA 产品管理团队中的一员,负责电子商务策略。他从企业以及 IT 方面提出了多个解决合规性、安全性、可视性、可伸缩性以及标准的方法。企业到企业 (B2B) 标准、最佳实践以及完善的端到端集成 (ESB, BPM, B2B, BAM) 是他的关注点。自 1996 年至今,他多次在国际以及国内活动中通过业务和技术白皮书、实际操作研讨会以及演示文稿来介绍新产品和技术,被公认为电子商务领域内的 Oracle 主题专家。

寄送此页面
Printer View 打印机视图