• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

利用ESB虚拟化 BPEL流程服务端点

发布: 2007-6-13 19:52 | 作者: admin | 来源: | 查看: 33次 | 进入软件测试论坛讨论

领测软件测试网

自 Oracle 将企业服务总线 (ESB) 作为 SOA 套件的一部分发布以来,许多人都很好奇,与仅在 Oracle BPEL 流程管理器内进行完整的自包含实施相比,ESB 所具有的附加值及其使用场合。

它的优势之一是能够对其用户透明地虚拟化服务端点,从而提供从其自有格式到规范格式的转换以及可靠路由。

在该技术说明中,您将通过两个有指导的步骤了解如何通过重用现有产品采用 BPEL 流程来利用 ESB 将原有服务虚拟化,以及这样做可以获得怎样的宝贵价值。

设置

现在,开始启动流程,您将通过应用该流程了解使用 BPEL 和 ESB 的最佳实践。我们已经创建了一个使用公用模式的异步流程,它代表一个规范的客户请求,以下为部分摘录:

[...]

<element name="CustomerUpdateProcessProcessRequest">

<complexType>

<sequence>

<element name="customerName" type="string"/>

<element name="ccard" type="string"/>

<element name="ccardNr" type="string"/>

<element name="email" type="string"/>

<element name="pw" type="string"/>

</sequence>

</complexType>

</element>

[..]

该规范客户请求 (CustomerUpdateProcessProcessRequest) 包含名称 (customerName)、信用卡类型 (ccard)、信用卡号 (ccardNr),以及电子邮件地址 (email) 和口令 (pw)。

本说明中探讨的示例流程将更新一个原有系统(在本例中为一个数据库),该系统最后将由不同的数据结构替代,如下所示。

<xs:complexType name="Customer">

<xs:sequence>

<xs:element name="custid">

<xs:simpleType>

<xs:restriction base="xs:string">

<xs:maxLength value="40"/>

</xs:restriction>

</xs:simpleType>

</xs:element>

<xs:element name="fname" minOccurs="0" nillable="true">

<xs:simpleType>

<xs:restriction base="xs:string">

<xs:maxLength value="40"/>

</xs:restriction>

</xs:simpleType>

</xs:element>

<xs:element name="lname" minOccurs="0" nillable="true">

<xs:simpleType>

<xs:restriction base="xs:string">

<xs:maxLength value="40"/>

</xs:restriction>

</xs:simpleType>

</xs:element>

<xs:element name="creditC" minOccurs="0" nillable="true">

<xs:simpleType>

<xs:restriction base="xs:string">

<xs:maxLength value="40"/>

</xs:restriction>

</xs:simpleType>

</xs:element>

</xs:sequence>

</xs:complexType>

该流程在出站 partnerlink (UpdateCustomerService) 和输入变量之间使用 assign 活动 (Transform_Input2ProtocolSchema) 来将规范结构转换为原有结构。

图 1

该转换利用 XSL(XML 样式表转换)(之后可在系统中重用)。部分代码摘录如下所示。

第 1 步:不修改流程源而将原有服务调用移至 ESB 中

现在,流程已就位,周边情况已设定,第一个目标就是虚拟化 ESB 系统后的真实服务,并使调用对该 BPEL 流程变得透明。

应用该模式可使流程松散,但在其基础架构服务方面仍具有可靠的耦合,且无需知晓这些服务内容。如此,更改某项服务时就不会导致整体服务崩溃或更改。

因为 BPEL 流程内创建的文件具有很高的可重性,所以无需更改就可用于任何一个 ESB 系统内。

开始之前,在创建了新的 ESB 项目后,所有与 partnerlink 有关的文件都需在 ESB 项目中可引用。在生产环境中,架构师会将其存储在一个集中的模式服务器上或信息库中,以确保这些文件只存在一个副本。为了简单起见,您可以复制他们。

在使用数据库适配器的情况下(本例即是如此),要复制的文件是

  • DBAdapterOutboundHeader.wsdl(头描述)
  • UpdateCustomer.wsdl(partnerlink 的服务定义)
  • UpdateCustomer_toplink_mappings.xml(TopLink 映射)
  • UpdateCustomer_table.xsd(数据定义)

执行完上述操作后,这些文件就可在新创建的 ESB 系统中重用了。第一步是以 UpdateCustomer.wsdl 为基础创建一个新服务 (UpdateCustomerService)(如下所示)。

图 2

其结果将是流程中 partnerlink 的一个完美克隆,它公开两个操作:合并和写入。一旦所有所需文件都可使用后,ESB 就可确定该服务的类型了:

图 3

接下来,创建一个使用同一定义 (WSDL) 的路由服务 (Routing Service),以向外部公开合并/写入操作。将其命名为 PlainExposed 并包含两个路由规则,以只将请求转发至由数据库适配器公开的相应操作。

图 4

在 ESB 系统图中应用了更改后,将如下所示。

图 5

创建了该系统并将其注册到企业服务总线后,BPEL 流程就可使用它了 — 目前只能在运行时使用。

Oracle BPEL 流程管理器在 partnerlink 级提供了一个标志来为服务定义 (WSDL) 指定运行时位置。与编译时用于类型验证的位置不同,该位置用于调用。该标志名为 wsdlRuntimeLocation,如果设置了该标志,则它必须指向具体的 WSDL(其中包含一个绑定)。在本例中,它指向了 PlainExposed 路由服务的定义,该服务可在 ESB 控制台 (ESB Console) 中找到。在运行时,通过只在运行而非加载时获取绑定 WSDL,BPEL 流程将尽可能晚地进行绑定。

图 6

在 BPEL 流程内,可以直观地添加该属性(双击 partnerlink 即可),如下所示。

图 7

重新部署了流程后,再次执行该流程时可在 ESB 控制台看到其实例。

图 8

考虑到性能和将 ESB 添加到图中的影响,需要注意的是 BPEL 和 ESB 以原生或内存方式通信(如果可能)。只有在分发后,它们才通过 HTTP 使用 SOAP 进行调用。此外,组件间的内存中优化可以针对 SOA 实现无缝的可跟踪方法。

第 2 步:在 ESB 系统内重用规范的模型和转换以实现“区别对待”

通过应用该模式,BPEL 流程可以保持一致性,专注于业务问题,而不是协议转换,并完全基于规范的模型进行工作。

第二步的目标是在 BPEL 流程中重用转换文件以及规范的客户模型,向外部服务使用方公开客户请求的规范表示。

重用 BPEL 流程的两个以上文件所需执行的第一个步骤就是引用这些文件。在示例中,第一个文件名为 CustomerUpdateProcess.xsd,其中包含了简介部分所述的客户模型。

第二个转换文件名为 Transformation_Cannonical2Protocol.xsl,可将规范的表示转换为原有表示。

执行完这些操作后,就可使用这两个文件了。在 ESB 系统图中,创建一个新的路由服务 (UpdateCustomerCanonical),并添加一个名为“execute”的新异步操作。该新操作将从 CustomerUpdateProcess.xsd 模式中提取参数 CustomerUpdateProcessProcessRequest 元素。

图 9

接下来,通过创建新的路由规则将该路由服务连接到数据库服务 (UpdateCustomerService),如以上屏幕截图的底部所示。

因为路由服务的输入与数据库服务的参数不同,所以这时要重用转换 (Transformation_Cannonical2Protocol.xsl)。

Oracle JDeveloper 中的 ESB 系统最终将如下图所示,其中包含两个路由服务:一个是规范服务 (UpdateCustomerCanonical),另一个是具有原有格式及其公开操作(合并/写入)的服务 (PlainExposed)。

图 10

在企业服务总线内重新注册该系统后,就可向 BPEL 流程添加逻辑来调用该系统了。

在 BPEL 流程内,创建一个新 partnerlink,它指向路由服务 UpdateCustomerCanonical 的抽象定义 (WSDL)。而具体的绑定定义则再次添加为 wsdlRuntimeLocation 标志。因此,剩下的就是简单的分配了,如下图所示。

图 11

assign 规则 (Assign_ToInput) 将流程的输入变量挨个映射到 CanCustomerServiceESB 的输入变量。

图 12

一旦重新部署并执行了 BPEL 流程,就可在 ESB 控制台中看到该实例,如以下屏幕截图所示。

图 13

请看 BPEL 控制台,即便更改了 partnerlink,整个系统的可跟踪特性仍得到了改善,只需单击操作,用户就可跟踪实例从 BPEL 到 ESB,反之亦然。

图 14

图 15

结论

采用 BPEL 流程之前,该流程需要了解原有数据库服务及其格式,还有之间的转换,现在,原有服务对于流程完全透明。无需牺牲流程自身的编排就可对其进行替换。

应用这些模式和最佳实践的好处有哪些?业务编排完全基于规范的模型业务,而非由协议驱动。ESB 的引入提高了可靠性;利用其精确的错误诊断功能,您可以实时对故障做出反应、随时更改路由以及重试失败的调用。

(责任编辑:铭铭 mingming_ky#126.com TEL:(010)-68476636)



延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网