IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  WebSphere  >

WebSphere Enterprise Service Bus V6.2 的新特性,第 3 部分: 中介策略

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

英文原文

英文原文


级别: 中级

Brian Hulse, 软件工程师, IBM

2009 年 9 月 02 日

本系列文章介绍 WebSphere ESB V6.2 及其相关工具 WebSphere Integration Developer 中的新特性和增强特性,包括传输协议绑定、数据绑定功能、中介原语和声明式流控制。第 3 部分描述中介策略的创建和存储,以及使用中介策略动态地配置中介流。 本文例子中的中介策略使用存储在 WebSphere Service Registry and Repository 中的 XSL 文件的动态装载。

简介

点击如下链接,查看本系列更多对 WebSphere ESB V6.2 新特性的介绍:

更多关于 WebSphere ESB 的技术资源,请参考:

本文在构建中介流以利用 IBM® WebSphere® ESB V6.2 中的动态配置功能时引入了中介策略的概念。文中描述如何通过 WebSphere Integration Developer 创建中介策略,以控制中介流的默认配置,以及如何在 WebSphere Service Registry and Repository 中表示和提取这些策略。文中还描述如何使用 WebSphere Service Registry and Repository 创建中介流中使用的新的中介策略。

中介策略的威力在于使一个中介流可用于多个配置,而在之前,每个配置必须有一个单独部署的中介流。中介策略平等地提供实际的管理能力,允许以完全动态的方式控制配置。

本文描述中介策略的概念、形式以及如何创建中介策略,并通过现实中的例子展示从创建新的中介策略到在中介流中使用它的过程中的每个步骤。

中介策略概念

WebSphere ESB V6.2 允许以中介策略文档的形式定义动态配置,中介流可以装载中介策略,从而进行配置。此外,可以根据消息上下文有条件地装载这些中介策略,这样提供了一种灵活的机制,使一个中介流可以根据可用中介策略的数量表现出多种行为。

在引入中介策略之前,只能使用提升(promoted)属性控制中介流。中介流中任何提升属性在管理控制台中都是可见的,可以通过更改这些属性来更改流配置。在管理控制台中对提升属性的更改将影响所有引用这些属性的流,这种更改将在部署的应用程序中持久化。WebSphere ESB V6.2 中有一个新的概念,即任何可提升的属性都可以通过中介策略动态更新,但是通过策略控制影响的任何更改都有一个生命周期,即对流的当前调用。在 WebSphere ESB V6.2 中,对于提升属性还有一个新的组概念,因此可以将具有相同兴趣的提升属性分为一组,并以一个常见的、描述性的标识符作为标签。

提升属性可视作中介流中的可变点,可使用中介策略定义对这些可变点使用的值。中介策略使用 WS-Policy 格式,WS-Policy 中使用的概念与提升属性中 WebSphere ESB 定义的那些概念之间存在一种简单的映射。

策略域

如前所述,所有提升属性现在都可以集中到组中。一个提升策略组直接映射到一个策略域。每个域由一个惟一的名称空间表示,这个名称空间是由提升属性的组名构成的,形式如下:http://www.ibm.com/wbi/mediation/200812/<GroupName>,其中:

<GroupName> 是提升属性组的名称。

策略断言

策略由很多断言组成,这些断言定义特定策略域中定义的概念的值。对于中介策略,断言是提升属性的一种表示,其名称就是它所表示的提升属性的别名。例如,考虑下面的提升属性:


图 1:Mapping file 提升属性
Mapping file 提升属性

图 2:中介策略表示
中介策略表示

图 1 和图 2 显示提升属性字段与中介策略字段之间的关系。组 AddressServices 中名为 XSLFile 的提升属性直接映射到域中名为 XSLFile 的中介策略断言,xml 标记为 sibx,可转换为:http://www.ibm.com/wbi/mediation/200812/AddressServices

在这个例子中,中介策略中的断言采用与提升属性相同的值。但是,应该强调的是,WebSphere Integration Developer 和 WebSphere Service Registry and Repository 都可以帮助创建中介策略,所以不需要知道确切的 XML 格式。到目前为止,所有讨论主要集中于提升属性与中介策略之间的关系。现在让我们看看 WebSphere ESB V6.2 如何使用中介策略。

中介策略的提取和传播

为了允许在中介流中使用动态覆盖,WebSphere ESB V6.2 引入了两个新的概念:一个是新的中介原语 Policy Resolution,另一个是 Service Message Object 的一个新的上下文区域,即 Dynamic Property Context。

Policy Resolution 原语

Policy Resolution 原语:

  • 允许将消息的各部分与策略条件名相关联,以便用于计算将哪些中介策略应用到当前消息。下面的 图 8 显示了一个例子。
  • 在 WebSphere Service Registry and Repository 中找到应用到当前流的中介策略。
  • 将所有这些中介策略分解成单独的中介策略。
  • 将单个中介策略装载到 Dynamic Property Context 中。

通过使用 Dynamic Property Context,可以动态配置中介原语。因此,该原语应该在中介流的一开始使用,从而便于动态配置它之后的所有原语。

Dynamic Property Context

在 WebSphere ESB V6.2 中,现在可以在 Dynamic Property Context 中用值覆盖提升属性。这包含一些 propertySets 组,每个组描述一组名称/值对。每个 propertySet 由一个组表示,对应于被覆盖的提升属性组。属性的名称对应于提升属性的别名,它的值等于提升属性的覆盖值。


图 3:Dynamic Property Context
Dynamic Property Context

图 3 显示 Dynamic Property Context 中用于覆盖用于 formatAddress 提升属性的 XSL 文件的值。

默认中介策略的创建

在 WebSphere Integration Developer and WebSphere ESB V6.2 中,每当创建一个包含提升属性的部署工件时,同时也会创建那些属性的中介策略表示,并随部署工件一起打包。这可能涉及很多策略,因为需要为提升属性中提到的每个组创建一个表示该组的策略。这些中介策略是流中提升属性的配置的另一种表示,它们被称作默认中介策略。这些默认中介策略可以与 WebSphere Service Registry and Repository 中的 SCA 模型相关联,所以可以通过这些策略中表达的值(而不是管理控制台中提供的值)来控制提升属性。

导入到 WebSphere Service Registry and Repository

当把一个从 WebSphere Integration Developer/WebSphere ESB V6.2 生成的部署工件导入到 WebSphere Service Registry and Repository 时,会发生很多事情:

  • EAR 文件中包含的 SCA 模块被注册到 WebSphere Service Registry and Repository。
  • EAR 文件中包含的默认中介策略被注册到 WebSphere Service Registry and Repository。
  • 默认中介策略中提到的所有中介策略域被注册到 WebSphere Service Registry and Repository。

可以使用 WebSphere Service Registry and Repository 管理控制台查看新导入的 SCA 模块和中介策略。可以使用 WebSphere Service Registry and Repository 为新定义的域创建附加的中介策略,这一点后面会讲到。但是,在 WebSphere ESB 中使用默认中介策略或新创建的中介策略动态配置中介流之前,必须创建一个策略附件文档,以将这些中介策略与适当的 SCA 模块相关联,这一点后面会讲到。

gate 条件

如前所述,可以根据消息内容有条件地装载中介策略。要做到这一点,需要将 gate 条件应用到策略附件文档,表明将哪些策略应用到流的当前调用。同样,后面的场景中将给出相关的例子。

场景:Address formatting 中介

用例子描述中介策略的创建和使用再好不过了。在这个场景中,我们将创建一个中介流,选择一个属性来进行动态覆盖,创建新的策略为覆盖提供值,将这些策略关联到一个 SCA 模块,并创建 gate 条件,以便有条件地将这些中介策略装载到模块中定义的流中。

本场景基于一个分发(dispatch)服务,这个后端服务需要接收待发送邮件的目标地址。消息中的信息是通用格式,需要格式化为适用于邮件地址所在国家的邮件地址格式。而中介可以为系统提供格式化功能。所以,无需考虑具体的国家与格式,输入和输出消息都有相同的结构,这意味着可以使用相同的中介流,而为每个国家的格式装载不同的 XSL 文件。


图 4:请求消息业务对象
请求消息业务对象

图 5:响应消息业务对象
响应消息业务对象

实现这个功能的中介很简单,只需由一个 Policy Resolution 原语和一个 XSLT 原语组成,Policy Resolution 原语为流提取相关的中介策略,XSLT 原语装载中介策略指定的 XSL 文件,并用它转换消息。


图 6:address services 的中介流
address services 的中介流

看看用于 formatAddress 原语的提升属性:


图 7:XSLTransform 提升属性
XSLTransform 提升属性

这里有一个提升属性,它有一个 AddressServices 组,有一个别名为 XSLFile。这里显示的别名值是没有可应用的中介策略时使用的转换,即默认值。

在我们的解决方案中,除了默认转换文件外,所有 XSL 文件都存储在 WebSphere Service Registry and Repository 中。为了根据分发地址所在的国家有条件地装载每个文件,需要添加 gate 条件。为此,可以使用 Policy Resolution 原语设置一个策略条件名与消息的一部分之间的关联:


图 8:策略条件
策略条件

本例有一个策略条件名,即 Country,它与请求消息中的 Country 字段相关联。

使用 WebSphere Service Registry and Repository

本中介流被导出为 EAR 文件,并作为一个 SCA Module 导入到 WebSphere Service Registry and Repository 中:


图 9:SCA Integration Modules
SCA Integration Modules

导入该模块时,同时还会在 WebSphere Service Registry and Repository 策略编辑器中定义策略域 AddressServices,并注册用于这个单独的域的默认中介策略。


图 10:AddressServices 的默认中介策略
AddressServices 的默认中介策略

这里可以选择忽略这个策略,允许通过在管理控制台中访问提升属性来控制中介流的默认行为,也可以选择将这个默认策略与 SCA 模块相关联,通过中介策略控制流的整个配置。我们的例子不是使用默认策略。

创建 XSL 文件

可以通过适合您自身系统的任何方式,创建在 WebSphere Service Registry and Repository 中使用和存储的 XSL 文件。本例使用 WebSphere Integration Developer Mapping Editor 创建用于导出到 WebSphere Service Registry and Repository 的文件:

  • 打开名为 formatAddressXSLTransform 原语。
  • 选择 Details => New
  • 为映射选择适当的文件名。在本例中,需要为法国地址创建映射,因此将它命名为 France
  • 选择转换的输入和输出类型:

图 11:新的 XML 映射
新的 XML 映射

然后,可以使用 Mapping Editor 创建适合该国家的转换。然后,Mapping Editor 将创建一个表示该转换的 XSL 文件,可以通过打开 J2EE 透视图查看该文件,在 J2EE 透视图中,中介流文件夹的 xslt 文件夹中将包含新的 XSL 文件:


图 12:新的 XSL 文件
新的 XSL 文件

将该文件复制粘贴到一个临时目录中,以便导入到 WebSphere Service Registry and Repository 中。将新的 XSL 文件装载到 WebSphere Service Registry and Repository 中,将文档类型设为 XML:


图 13:装载新的 XSL 文件
装载新的 XSL 文件

新的 XSL 文件被装载到 WebSphere Service Registry and Repository 之后,它将出现在 XML 文档列表中。打开这个新文档,可以看到 WebSphere Service Registry and Repository 为它指定了一个新的惟一标识符,即 bsrURI。这个值很重要,因为有了它就可以构建 http 请求,使中介流中的 XSLTransform 原语可以动态地装载它。要发现这个 bsrURI,可以打开这个新的 XML 文档,在 Additional Properties 下查找它,如下图所示:


图 14:XSL 文件的 bsrURI
XSL 文件的 bsrURI

对于每种不同的格式,都需要创建一个 XSL 文件。现在,我们有了自己的 XSL 文件,我们可以创建表示它们的中介策略。

创建中介策略

要了解关于这个过程的信息,请参阅 Creating mediation policies in WebSphere Service Registry and Repository,这是产品信息中心的一篇教程。请务必选择中介域 AddressServices,它只有一个断言:XSLFile。用于这个断言的值是用于提取文件的完整的 HTTP 请求,其构成如下: http://<server>:<port>/WSRR/6.2/Content/<bsrURI>,其中:

  • <server> —— WebSphere Service Registry and Repository 服务器的名称
  • <port> —— 为 WebSphere Service Registry and Repository 请求服务的端口
  • <bsrURI> —— 被装载的 XSL 文档的 WebSphere Service Registry and Repository id

图 15:策略文档
策略文档

记住为中介策略提供一个标识符,在这个例子中标识符为 PostalFrance


图 16:策略标识符
策略标识符

这个策略文档现在需要与 SCA 模型相关联。

将策略与模块相关联

从 Service Metadata 区打开 SCA Module,选择 Policy 选项卡,然后选择 Edit Policy Attachments


图 17:Editing Policy Attachments
Editing Policy Attachments

通过 Search 对话框可以选择新创建的策略,在这个例子中,它在一个名为 AddressFrance 的文档中。实际上,列表中显示的是策略的标识符,所以实际上看到的是 PostalFrance

选择适当的策略并单击 Finish。此时,WebSphere Service Registry and Repository 将自动生成一个策略附件文档,我们将在这个文档上定义适当的 gate 条件。

定义 gate 条件

只有当分发国家为 France 时才应该应用定义为 PostalFrance 的中介策略,所以需要确保只有在此条件下才应用该中介策略。为此,定义一个中介 gate 条件,以便自动生成策略附件文档。打开 SCA 模块本身,并选择 Applied Policy Attachments。可以看到新生成的策略附件文档,它将 AddressServices 模块与中介策略 PostalFrance 相关联。打开该文档,并选择 Edit Properties => Add Property


图 18:中介 gate 条件的名称
中介 gate 条件的名称

所有中介 gate 条件的名称都必须以 medGate_ 开头。在这里,gate 条件的值必须表明何时装载名为 PostalFrance 的策略:


图 19:中介 gate 条件的值
中介 gate 条件的值

至此已完成设置,因此运行时处理将按照如下所示:

  1. 消息到达,其中包含 /body/dispatch/input/Country = France
  2. Policy Resolution 原语发现适用的中介策略 PostalFrance
  3. Policy Resolution 原语装载具有新配置的 dynamicPropertyContext:一个名为 AddressServices 的组中的 XSLFile = http://<server>:<port>/WSRR/6.2/Content/<bsrURI>
  4. XSLTransform 原语 formatAddress 识别组 AddressServices 中的字段 XSLFile,并使用该值覆盖与之关联的提升属性。
  5. XSLTransform 原语发送一个 HTTP 请求到 WebSphere Service Registry and Repository,以提取这个被引用为 bsrURI 的 XSL 文件。
  6. 根据这个 XSL 文件转换消息。

如果 Country 不是 France,并且没有其他适用的中介策略,那么中介流将使用默认值 XSLFile

这个模型的威力就在于它的可扩展性。可以通过新的转换增加新的国家,而不必对中介流作任何修改。

结束语

本文引入中介策略的概念来控制使用 WebSphere ESB V6.2 的中介流的动态配置。然后,本文展示如何使用 WebSphere Service Registry and Repository 创建和存储策略以及 XML 文件,以供中介流动态配置流。最后,本文展示如何根据流中的不同上下文有条件地装载这些中介策略。



参考资料



关于作者

Brian Hulse 是英国 IBM Hursley 软件实验室 WebSphere ESB 团队的一名高级软件工程师。他在 Hursley 从事软件开发已有 20 年,其中最后 5 年在 SOA 领域工作。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款