使用 WebSphere Message Broker V8 中新的应用程序和库功能

应用程序和库是 WebSphere Message Broker V8 中引入的新概念,用于帮助开发人员和管理员更轻松地组织 WebSphere Message Broker 解决方案中的工件。本文将描述应用程序和库,展示它们如何改进您的开发和部署工作流,如何转换现有的解决方案以便使用它们。

Kevin Quan, 高级软件开发人员,WebSphere Message Broker 工具包团队, IBM

Kevin Quan 是位于多伦多市的 IBM 加拿大软件实验室的 WebSphere Message Broker 工具包团队的一名软件开发人员。他拥有加拿大滑铁卢大学的电子工程学士学位和计算机工程硕士学位。



2012 年 3 月 26 日

免费下载:IBM® WebSphere® Message Broker 试用版
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

什么是应用程序和库?

在 V8 以前的 IBM® WebSphere® Message Broker(以下简称 Message Broker)的工具包中,与组成解决方案的工件的交互方式以及这些工件的可视化过程是各不相同的,主要取决于您是在开发、部署还是管理工件。通过引入应用程序和库的概念,这种可视化和交互实现了统一,更容易通过 3 个阶段来理解它们。本文将介绍应用程序和库,展示如何使用它们,还将解释转换您现有的解决方案,从而利用应用程序和库以及 Message Broker V8 的优势。

示例描述

本文使用一个简单示例来展示应用程序和库在 Message Broker V8 中提供的优势。您可以 在本文底部下载示例的 zip 文件。zip 文件 migration_to_applib_v7projects.zip 包含一组在 Message Broker V7 中创建的项目。zip 文件 migration_to_applib_v8applib.zip 包含一些应用程序和库,用于展示示例在转换为 Message Broker V8 中的一种应用程序和库结构之后的外观。

由于应用程序和库主要影响解决方案的结构,所以该实例主要关注工件的结构布局,而不是解决方案的功能性行为。

migration_to_applib_v7projects.zip 中有两个解决方案,即 MyFirstSolution 和 MyOtherSolution。MyFirstSolution 包含一些可部署的流程,其中一个流程如图 1 所示:

图 1. MyFirstSolution 的示例
MyFirstSolution 的示例

对于本讨论,解决方案的重要方面是结构依赖关系。一个名为 MyFirstSolution 的流程项目中包含两个主要的流程。尽管未包含在本示例内,但此解决方案在相同流程项目中包含其他 ESQL 文件或消息映射。这个流程项目还拥有对以下 3 个项目的依赖关系:MyFirstSolutionMessageSet 消息集项目、CommonSubFlows 流程项目和 SharedMessageSet 消息集项目。

MyFirstSolutionMessageSet 包含的消息定义仅供 MyFirstSolution 使用。CommonSubFlows 和 SharedMessageSet 都包含此解决方案使用且其他解决方案也有可能使用的工件。CommonSubFlows 包含各种可重用的子流程(可能还包含消息映射和 ESQL 文件),而 SharedMessageSet 包含消息定义。可共享一个消息集的一个传统示例可能是:该消息集是在某个行业模式下创建的。

在 MyFirstSolution 中,消息集由 MQ Input 节点用于验证队列上的消息,子流程用于封装某些功能。对于本讨论,这些依赖关系的原因并不重要,但项目之间的关系很重要。

这个 PI 还包含另一个名为 MyOtherSolution 的解决方案,该解决方案包含在一个流程项目中。此解决方案有一个可部署的消息流,并拥有对消息集 MyOtherSolutionMessageSet 和 SharedMessageSet 的依赖关系。

下一节将介绍在使用上面这样的多个解决方案时,为什么 V7 中的可视化不那么理想。

为什么使用应用程序和库?

在 Message Broker V7 上的简单示例中, Broker Development 视图有 6 个项目实现两个解决方案。甚至在这种较小规模上,如下面的图 2 所示,也会出现一些问题。

图 2. Broker Development 视图中两个简单解决方案的示例
Broker Development 视图中两个简单解决方案的示例
  • 哪些项目属于哪些解决方案,这并不明确。一些项目可能已正确命名,但一个项目(比如 CommonSubFlows)属于 MyFirstSolution、MyOtherSolution 还是同时属于二者并不是很明确。答案是项目仅属于 MyFirstSolution,简单地查看 Broker Development 视图并不容易发现这一点。
  • 随着解决方案规模、Broker Development 视图中的项目数量变得非常庞大,一次处理如此多的项目也会变得非常难。您可以使用 Message Broker V6 和 V7 工具包中的工作集来解决此问题,它们需要您主动保持工作集与您解决方案中使用的实际项目一致。本文后面的章节将解释应用程序和库功能如何帮助您解决这些问题。

随着您继续执行构建和部署解决方案的工作流,下一步就是创建一个 BAR 文件。BAR File Editor 列出了可部署的工件,您可以选择将哪些工件包含在 BAR 文件中。BAR File Editor 的一个示例如图 3 所示:

图 3. BAR File Editor 显示了示例
BAR File Editor 显示了示例

要为单个解决方案构建一个 BAR 文件,您需要理解要将哪些工件包含在 BAR 中。例如,如果尝试部署 MyFirstSolution,您需要知道在 Message Flows 类别下检查 AnotherDeployableFlow 和 MainFlow(而不检查 MainSolutionFlow)。类似地,如果尝试部署 MyOtherSolution,您需要知道在 MyOtherSolutionMessageSet 和 SharedMessageSet 下检查消息集,因为存在对 SharedMessageSet 的依赖关系。随着在解决方案中包含其他工件(比如适配器和 Java 代码),以及工作区中的流程和项目数量增加,这一过程会变得更加困难和容易出错。

在示例中,您为两个解决方案都构建了一个 BAR 文件,并将它们存储在 BAR 文件项目下。如果您打开此 BAR,就会在 Manage 选项卡中看到构建了哪些工件,如图 4 所示:

图 4. 一个 BAR 文件中的各种解决方案中已构建的工件示例
一个 BAR 文件中的各种解决方案中已构建的工件示例

图 4 演示了开发人员或管理员可能面临的另一个难题。类似于 Broker Development 视图和 BAR Editor 的 Prepare 选项卡,来自多个解决方案的工件会在一个简单的列表中显示,很难确定哪些工件属于哪些解决方案,尤其在未显示物理项目的上下文的情况下。在将这个 BAR 文件部署到运行时后,会出现类似的问题,如图 5 所示:

图 5. 部署到一个代理上单个执行组的多个解决方案的示例
部署到一个代理上单个执行组的多个解决方案的示例

尽管此示例来自 Message Broker Toolkit 的 Brokers 视图,但在 Message Broker Explorer 中也可以看到类似的视图。图 5 中显示的其他问题是缺乏隔离。在示例中,两个解决方案都使用了 SharedMessageSet。如果您打算部署一个新 SharedMessageSet,更改会影响两个解决方案(这可能是一种想要的结果)。您可以将每个解决方案部署到它自己的执行组,以实现这种隔离,为每个解决方案分配一个执行组在某些情形下可能是适用的,但 BAR 文件的构造方式可能不方便进行这种分配,就像本示例中一样。

前面几节介绍了可以改进当前可视化状态的一些情形,解释了为什么解决方案的组织结构在 V8 中已得以改进。下一节将介绍在应用程序和库中引入的概念,然后展示如何建模和转换示例来使用应用程序和库。

有关应用程序和库的更多信息

应用程序是一个逻辑容器,包含解决一个问题所需的功能。应用程序也是一种封装方法,用于限制应用程序外部的工件对应用程序内容的访问和应用程序内容的查看。这种封装从开发期间开始,一直持续到部署和运行时。Message Broker 应用程序类似于解决方案的概念,但大型解决方案可跨多个应用程序而实现。

一个应用程序可包含一个或多个库。库为重用提供了方便。例如,如果您希望跨多个解决方案共享子流程或消息集,您应该将它们放在一个库中。除了方便重用,库也可能是一种可改进组织的结构组件。例如,库可包含访问外部服务所需的所有 ESQL 或所有工件。

应用程序和库可通过多种方式结合使用,其中一些方式如图 6 所示:

图 6. 使用应用程序和库的结构示例
使用应用程序和库的结构示例

在图 6 中的第一个图中,一个应用程序中包含一个完整的解决方案。在第二个图中,一个解决方案在结构上组织为一个应用程序和多个库。第三个图显示了使用一个通用库的多个应用程序。这些示例只是您组织解决方案结构的部分方式,您应该查看您当前的工件来确定哪种结构最有意义。以下是 Message Broker V8 中的应用程序和库使用规则:

  • 一个应用程序不得引用另一个应用程序,但可以引用 0 个或多个库。
  • 一个库可引用 0 个或多个库。

以下是使用应用程序和库来组织解决方案结构的一些最佳实践:

  • 特定于某个解决方案的可部署流程应该位于应用程序中,而不是位于库中。
  • 模式或消息集等数据工件应该位于一个库中。
  • 如果一个数据或功能性工件可重用(例如 ESQL 代码),请考虑将它放入库中。

以下各节介绍来自以前的 Message Broker 版本的项目和工件与应用程序和库的对应关系,以及如何转换它们,从而使用 V8 中的应用程序和库。

以前版本中的工件与应用程序和库的对应关系

现在您已经理解了什么是应用程序和库,本节将介绍如何转换来自 Message Broker V7 的现有示例,以便能够利用应用程序和库。在 Message Broker V7 及更早版本中,工件存储在消息流项目和消息集项目中。在 Message Broker V8 中,消息流项目不再存在。应用程序可包含与消息流项目相同类型的工件,以及以下内容:

  • Message Broker V8 中的新工件类型,比如 DFDL 模式、XSD 和映射
  • 来自消息集项目的数据工件,比如适配器文件、IDL 文件和 WSDL 文件

最后,在您的解决方案需要时,应用程序也可以包含整个消息集或 Java 项目。

库可包含与应用程序完全相同的工件和项目类型。尽管在可存储的内容上它们并没有什么区别,但在何时应该使用应用程序或库上,它们存在着明显的区别,如上所述。在上面的示例中,MyFirstSolution 包含以下项目:

  • 一个名为 MyFirstSolution 的流程项目
  • 一个名为 MyFirstSolutionMessageSet 的消息集
  • 一个名为 CommonSubFlows 的流程项目,它可能不是由 MyFirstSolution 单独使用
  • 一个名为 SharedMessageSet 的消息集,它可能不是由 MyFirstSolution 单独使用

您可以将此解决方案结构与应用程序和库相对应:

图 7. 将 V7 项目与 V8 应用程序和库的示例相对应
将 V7 项目与 V8 应用程序和库的示例相对应

在图 7 中,您构造一个名为 MyFirstSolution 的应用程序,它包含来自流程项目和消息集 MyFirstSolutionMessageSet 的所有工件。因为您已将 CommonSubFlows 和 SharedMessageSet 确定为可能可重用的工件,所以每个项目都放在一个独立的库中。您也可以将这两个项目都放在一个库中,但 SharedMessageSet 在 MyOtherSolution 中是单独使用的,然后由应用程序引用(未在图中显示)每个库。因此,在将解决方案重组为应用程序和库结构时,常常需要获取它们的整体视图。

从以前的 Message Broker 版本迁移并转换为应用程序和库

理解了 Message Broker V7 项目与应用程序和库的对应关系之后,您就可以执行转换。在各种 Message Broker Toolkit 版本之间迁移的最佳实践是:将您的所有项目导出到一个 PI 文件中,然后将该 PI 文件导入新版本中。要转换示例,可以使用 migration_to_applib_v7projects.zip 文件,您可以在本文底部下载它。

因为应用程序和库仅可用于 Message Broker V8 或更新版本中,所以首先需要通过一个 Project Interchange (PI) 文件导入以前版本中的项目。因为在 V8 中不再存在消息流项目,所以需要将每个消息流项目转换为消息代理项目。这种转换会更改与项目关联的元数据,但不会改变任何功能。项目在导入 V8 之后仍然有效,只要它们在导入之前没有错误。

在 V8 中,Message Broker 和消息集项目显示在 Broker Development 视图中一个 Independent Resources 类别下。图 8 显示了示例中的项目在添加到 V8 工作区中后的情景:

图 8. 在导入 V8 工作区中后,以前版本的项目的视图
在导入 V8 工作区中后,以前版本的项目的视图

要将一个 Message Broker 项目转换为应用程序或库,只需选择该项目并从其上下文菜单选择 Convert to Application or Library。先转换依赖关系(库)通常是一种不错的做法。已转换的 CommonSubFlows 的一个示例如图 9 和图 10 所示:

图 9. 初始化 CommonSubFlows 到库的转换
初始化 CommonSubFlows 到库的转换
图 10. 将 Message Broker 项目转换为库
将 Message Broker 项目转换为库

这种转换是在原地转换项目,也就是说,更新了项目的元数据,现在将它视为一个库。将一个项目转换为应用程序或库之后,该项目不再出现在 Independent Resources 类别下。应用程序和库在 Broker Development 视图中显示为 Independent Resources 上方的一个顶级项,如图 11 所示:

图 11. 在 Broker Development 视图中显示的库的示例
在 Broker Development 视图中显示的库的示例

您可以对其他项目类型(比如消息集或 Java 项目)使用相同的过程,只需稍微进行更改即可。例如,当将 SharedMessageSet 转换为库时,您必须为库指定一个名称,因为没有将 SharedMessageSet 实际转换为库,所以需要创建一个包含此消息集的新库。

应用程序和库的解释中已提到,应用程序或库可包含工件或其他项目。对于 Message Broker 项目,一个应用程序或库可包含 Message Broker 项目中存在的任何工件,因此只需简单地更改项目元数据,就可以变成应用程序或库。对于消息集项目和 Java 项目,应用程序和库包含整个项目,因此您必须创建一个包装器应用程序或库。

最后,MyFirstSolution 和 MyOtherSolution 可通过上下文菜单迅速转换为应用程序。此操作会自动将关联的消息集项目 MyFirstSolutionMessageSet 和 MyOtherSolutionMessageSet 包含在对应的应用程序中。完成的转换如图 12 所示:

图 12. 已完成的 V7 示例到应用程序和库的转换
已完成的 V7 示例到应用程序和库的转换

下一节介绍如何可视化和更高效地使用新应用程序解决本文前面提出的问题。

使用应用程序和库

将一个解决方案转换为应用程序和库,大大简化了解决方案的识别和处理。示例中的每个解决方案都被替换为其自己的应用程序,所有工件(包括任何通用工件)都显示在应用程序下方。一个基于 MyFirstSolution 的示例如图 13 所示:

图 13. MyFirstSolution 中使用的工件显示在应用程序下方
MyFirstSolution 中使用的工件显示在应用程序下方

在图 13 中,您可以看到来自 CommonSubFlows 和 SharedMessageSet 的流程、消息集,以及子流程和消息集直接显示在应用程序下方。您无需滚动 Broker Development 视图即可找到相关的工件或项目,因为它们都列在相同的父节点下。所有其他可包含在应用程序中的工件(比如 DFDL 或 XSD 模式、映射、ESQL 文件和测试客户端)也将显示在应用程序下方。

另一种集中在应用程序中的方法是将焦点放在它上,您可通过如下所示的上下文菜单来完成。您一次可以将焦点放在一个应用程序或库上,当放置焦点时,只有该应用程序或库的内容可在 Broker Development 视图中看到:

图 14. 启用焦点的上下文菜单项
图 14. 启用焦点的上下文菜单项

焦点是工作集的一种进化,将始终包含焦点应用程序或库所包含的工件和项目,而无需任何主动维护。

可视化应用程序和库的简单性在 BAR File Editor 中得到了延续。如果您希望在一个 BAR 文件中包含一个应用程序或库,应用程序或库中的所有可部署的工件会自动包含在 BAR 文件中。如果您包含的应用程序引用了一个库,您只需在 BAR File Editor 中选择该应用程序,引用的库就会自动包含在其中。创建 BAR 文件的过程得到了大大简化,因为您不再需要理解和确定需要部署哪些工件。简化的流程示例如图 15 所示:

图 15. 为 MyFirstSolution 构建 BAR 的示例
图 15. 为 MyFirstSolution 构建 BAR 的示例

在图 15 中,您通过在树中进行选择,确定了您希望构建哪个应用程序。将包含在应用程序中的可部署的工件显示在它下方。在选择消息流、库和其他消息流依赖关系单选按钮后,选择未包含在应用程序中的库是一个类似的过程。构建了一个 BAR 文件之后,Manage 选项卡也会显示它包含按应用程序或库组织的内容,如图 16 所示:

图 16. 按应用程序组织的 BAR 文件内容
按应用程序组织的 BAR 文件内容

当将 BAR 部署到运行时时,会显示一种类似的工件视图。来自 Message Broker Explorer 的一个相关示例如图 17 所示,来自 Brokers 视图的示例如图 18 所示:

图 17. Message Broker Explorer 中已部署的应用程序和库
Message Broker Explorer 中已部署的应用程序和库
图 18. Brokers 视图中已部署的应用程序和库
Brokers 视图中已部署的应用程序和库

应用程序也可在运行时内执行隔离。例如,此示例中的两个应用程序都使用了 SharedMessageSetLib 库,并部署了一个独立副本作为应用程序的一部分。通过这种方式,您可以更新 SharedMessageSetLib 并部署 MyOtherSolution 应用程序的一个更新的副本,而无需修改现有的 MyFirstSolution 部署。MyFirstSolution 中的任何流无法跨应用程序容器查看,无法访问 MyOtherSolution 中的资源,反之亦然。

结束语

本文介绍了如何获取在 V8 之前的 Message Broker 中创建的解决方案,将它们转换为应用程序和库结构,这为用户提供了一种强大的新方式,使他们能够在项目的开发、部署和运行时阶段以一致的方式可视化、理解和使用工件。使用应用程序和库还可以实现应用程序的隔离和存储在库中的工件的可重用性。通过转换现有的 Message Broker V6 或 V7 解决方案来使用应用程序和库,您可以利用此新功能并简化您的开发流程。


下载

描述名字大小
代码示例migration_to_applib_v7projects.zip32 KB
代码示例migration_to_applib_v8applibs.zip33 KB

参考资料

学习

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=806744
ArticleTitle=使用 WebSphere Message Broker V8 中新的应用程序和库功能
publish-date=03262012