通过将应用程序资源部署为源文件来增强 Websphere Message Broker 应用程序的灵活性

WebSphere Message Broker V8(后面简称为 “Message Broker”)Toolkit Fix Pack 1 使您的消息流更加灵活,支持您更新和部署一个流的各部分而无需重新编译和重新部署整个流。您还可以在部署了应用程序但 Message Broker Toolkit(以下简称 “Toolkit”)不可用的相同服务器上组装代理归档 (BAR) 文件。本文将介绍如何使用 Toolkit Fix Pack 1 来构造和配置使用了可部署的子流、ESQL 模块和映射的消息流,如何无需编译即可将某个流映射为已编译的消息流 (CMF) 格式,以及如何在没有 Toolkit 的服务器上修改和组装 Message Broker 工件。

Julia Canella, 软件工程师,WebSphere Message Broker Toolkit 团队, IBM

Julia Canella 的照片Julia Canella 是位于加拿大多伦多的 IBM 软件实验室的 WebSphere Message Broker Toolkit 团队的一名软件工程师。她主要研究工具包 BAR 和 Navigator 组件。您可以通过 jcanella@ca.ibm.com 联系 Julia。



Eugene Kharlamov, 软件工程师, IBM

Eugene Kharlamov 是位于加拿大安大略省的 IBM 多伦多实验室的软件工程师。他为 WebSphere Integration Developer 开发连接性组件配置工具。



2012 年 11 月 01 日

简介

本文将介绍如何使用 IBM® WebSphere® Message Broker Toolkit Fix Pack 1 中的新特性,以源格式部署和管理 Message Broker 应用程序,而无需在 Toolkit 中编译它们。这些特性提高了应用程序的灵活性,并大大简化了代码更新。

在许多场景中,设计 Message Broker 应用程序来使用消息流、子流、ESQL 模块和映射的源代码部署很有意义。例如,多个流使用的 ESQL 模块可能需要在部署引用流之后更新。在过去,所有包含更新的 ESQL 模块的主要消息流必须重新编译和重新测试。此外,您还必须在安装了 Toolkit 的机器上创建一个 BAR 文件,然后将创建的 BAR 文件复制到目标服务器,并将它部署到目标 Message Broker 服务器。而且因为 Toolkit 仅支持 Message Broker 支持的部分平台,所以无法在相同的 Message Broker 服务器上创建 BAR 文件。

使用 Toolkit Fix Pack 1,您可以部署消息流、子流、ESQL 模块和映射,无需在 Toolkit 中单独编译每一项。因此,您可以在任何 Message Broker 服务器上创建包含这些组件的 BAR 文件,无论 Toolkit 是否可用。本文中的源部署示例展示了如何使用新的 Broker 和 Toolkit 特性实现这些目标。

您可在本文底部 下载一个示例应用程序,该应用程序展示了如何使用独立部署的可重用的组件,比如消息流、子流、ESQL 模块和映射,设计出具有最高灵活性的消息流。示例应用程序还展示了:在需要包含必须在添加到 BAR 文件和部署到 Message Broker 运行时之前编译的消息集或 Java® 代码时,如何在目标服务器上组装 BAR 文件。示例应用程序经过了简化,以便突出强调本文的主要主题。

在过去,所有消息流和子流都在具有 .msgflow 扩展名的文件中实现。可部署的消息流与子流之间的区别取决于消息流内容。如果流拥有可从外部(比如 MQ Input 或 Web Service Input 节点)调用的输入节点,那么它就是一个可部署的消息流,可编译为 CMF 文件并部署到代理中。

当组装 BAR 文件时,会编译所有可部署的消息流资源。该流引用的子流以内联方式合并到父 CMF 文件中,这是一个将可执行代码直接插入文件中的过程。如果父流中有多个子流引用了同一个子流实现,那么已编译的 CMF 中的子流的内联副本将取代每个节点。如果一个子流引用了另一个子流,那么嵌套的子流会扁平化并插入父流 CMF 中。在此过程中,ESQL 模块或映射代码也以内联方式合并到 CMF 文件中。

因此,包含一个消息流、一个子流、一个 ESQL 模块和一个映射的应用程序会转换为单个 CMF 文件并进行部署。当需要对容器消息流、子流、ESQL 模块或映射模块执行任何更改时,整个应用程序必须重新编译、重新测试和重新部署。

BAR 文件还必须安装在已经安装了 Toolkit 的机器上,因为组装 BAR 文件需要编译代理应用程序资源,而且编译流程依赖于 Toolkit 工作区元数据。Toolkit 仅可安装在 Linux® 或 Microsoft® Windows® 机器上,因此当 Toolkit 不支持 Broker 服务器操作系统时,无法直接在 Broker 服务器上组装 BAR 文件。

图 1 显示了一个代理应用程序的简单示例,其中包含一个主要的可部署消息流 (Flow1.msgflow)(引用一个子流 Subflow1.msgflow)和一个 ESQL 模块 (esqlflow.esql)。该子流还应用了 esqlsub.esql。在部署时,只有一个 Flow1.cmf 文件,它包含的流中同时包含了 ESQL 模块和内联子流:

传统应用程序 – 单一 CMF
传统应用程序 – 单一 CMF

为了使应用程序更加灵活且更易于维护,您可能不希望在进行更新时重新编译、重新测试或重新部署整个应用程序。当需要进行更改时,例如仅更改 ESQL 模块 esqlsub.esql,您可能只希望重新部署受影响的 ESQL 文件,而不用重新部署引用 esqlsub.esql 的所有资源。Toolkit Fix Pack 1 使应用程序更加灵活,使您能够将消息流 (.msgflow)、子流 (.subflow)、ESQL 模块 (.esql) 和映射 (.msgmap) 部署为源文件,而不是 CMF 文件中的已编译版本。

除了上面提及的资源,XML 模式 (.xsd) 定义的映射 (.map)、WSDL 文件 (.wsdl) 和消息模型也可部署为源文件。代理中的消息模型可由 XML 模式和 WSDL 文件定义。在 V8 中,它们不再必须仅使用消息集进行定义(但全面支持消息集所定义的消息模型)。图 2 显示,Toolkit 中创建的相同的源文件可添加到 BAR 文件中,并将代理独立部署为源文件:

新应用程序 – 将资源部署为源文件
新应用程序 – 将资源部署为源文件

通过直接将源文件部署到代理,而不将它们编译为 CMF 文件,可使应用程序更加灵活,因为更改的组件可独立部署到代理中。当只更新一个文件时,只需创建一个仅包含更新的源文件的新 BAR 文件并将它部署到执行组中。这个新源文件将替换执行组中的旧文件,引用流将自动重新启动,以便应用更改。例如,在图 2 中,如果 esqlsub.esql 发生更新,那么它是惟一需要添加到新 BAR 文件中的文件。在将该 BAR 文件部署到同一个默认执行组并运行 Flow1 的时候,该流将会停止,然后应用更新的 ESQL 代码并重新启动。

在目标服务器上封装 BAR 文件

在完成代理应用程序的创建时,源代码通常存储在一个源控制系统中,比如 CVS、RTC 或 Clear Case,然后要将代理应用程序部署到目标服务器,这需要将应用程序工件封装到一个 BAR 文件中。在自动化 BAR 创建过程后,通常会从一个自动化的脚本调用 MQSICREATEBAR 命令。MQSICREATEBAR 命令实现依赖于 Toolkit,因此使用此命令的 BAR 封装脚本仅可在安装了 Toolkit 的机器上运行。Broker 服务器通常运行在一个具有不受 Toolkit 支持的操作系统的服务器上。因此您必须使用 MQSICREATEBAR 命令在安装了 Toolkit 的机器上创建 BAR 文件,将该 BAR 文件转移到 Broker 服务器机器,并将该 BAR 服务器部署到代理服务器。图 3 显示了跨越多个机器的 BAR 封装流程:

传统部署流程
传统部署流程

将资源部署为源文件的选项允许您绕过 Toolkit 或 MQSICREATEBAR 命令中的编译过程。您可以使用 MQSIPACKAGEBAR 命令直接在代理服务器上构建 BAR 文件。此命令随 Broker 服务器一起安装,无需安装 Toolkit 即可调用。在这种情况下,如图 4 所示,可部署的源文件将从源控制服务器直接转移到 Message Broker 服务器。然后您可以在目标 Broker 服务器上运行 MQSIPACKAGEBAR 命令来创建 BAR 文件。可以使用 MQSIPACKAGEBAR 命令来简化代理资源部署流程,并使它独立于 Toolkit。

源部署流程
源部署流程

尽管使用 MQSIPACKAGEBAR 工具很方便(因为它运行于 Broker 服务器之上),所以不借助 Toolkit 而创建包含所有需要的工件及其依赖关系的脚本可能很复杂,复杂应用程序尤其如此。要简化此任务,可以在开发期间使用 Toolkit 生成 MQSIPACKAGEBAR 脚本。此脚本可在以后用于 Broker 服务器之上,只要应用程序文件结构没有更改。要生成脚本,请在 Toolkit 中打开 BAR 编辑器。在 Build 选项卡上选择想要的内容并构建 BAR 文件,确保选择了构建选项 Compile and in-line resources。生成 BAR 文件后,请打开 Manage editor 选项卡并展开组 Command for packaging the BAR contents。从图 5 可以看出,扩展的部分包含在服务器上创建同一个 BAR 文件所需的 MQSIPACKAGEBAR 命令。可将此脚本保存在文件系统或工作区上的某个文件中。开发完成后,源文件和脚本可签入到 Source Control Server 中。然后您可将脚本签出到 Message Broker 服务器上,更新指向本地文件系统的目标工作区位置,并在服务器上运行脚本。

MQSIPACKAGEBAR 命令
MQSIPACKAGEBAR 命令

图 6 显示了应用程序生命周期,从创作应用程序到将 BAR 文件部署到 Message Broker 服务器上:

应用程序生命周期
应用程序生命周期

使用源部署部署消息集和 Java 组件

使用源工件创建 BAR 文件时,代理应用程序的一些组件(比如消息集和 Java 代码)必须在编译之后才能添加到 BAR 文件。如果应用程序使用某个消息集或某个引用工作区上的 Java 项目中的一个 Java 类的 Java Compute 节点,那么您需要生成这些组件的可部署文件。

如果使用 Toolkit BAR Editor 或 MQSICREATEBAR 命令来构建 BAR 文件,那么系统会为您生成这些可部署文件。但是,如果使用了 MQSIPACKAGEBAR 命令,则必须在 Toolkit 中编译这些工件,然后才能将它们添加到服务器上的 BAR 文件中。可能无法在 Broker 服务器上编译这些资源,因为它可能没有安装 Toolkit 和必要的编译器。

有两种方式来编译这些资源。在 Toolkit 中,可以右键单击 Broker Development 视图中的 Java 或 Message Set 项目并选择 Build for mqsipackagebar。然后会生成 Message Set 和 Java 项目的编译后的文件,并将它保存在工作区上。可将这些编译后的文件签入到源控制存储库中,在服务器上检索它们,然后使用 MQSIPACKAGEBAR 命令将它们添加到 BAR 文件中。

另一种方法是使用 Toolkit MQSICREATEBAR 命令和特殊标记 -compileOnly

mqsicreatebar -data {workspaceWithJavaOrMsgSetProjects} -compileOnly

具有源部署的用户定义的属性和提升的属性

代理应用程序流通常使用在一个子流上定义的提升的属性和用户定义的属性。我们将用一个示例来展示如何设置这些属性的值和运行时如何使用这些值。图 7 显示了在 Flow Editor 中打开子流时,如何在 Properties 中设置用户定义的属性和提升的属性的默认值:

Flow Editor 中提升的子流属性和用户定义的子流属性
Flow Editor 中提升的子流属性和用户定义的子流属性

您也可以修改主要流的默认值,只需在单击 Flow Editor 中打开的主要流上的子流节点后设置该值:

Flow Editor 中修改的子流属性的默认值
Flow Editor 中修改的子流属性的默认值

修改用户定义或可配置的子流属性值的另一种方式是在 BAR Editor 中完成此操作。在 Manage 选项卡的树上的父子流文件元素下选择子流元素,然后在 Properties 视图中修改默认值:

在 BAR Editor 中更改提升的属性和用户定义的属性的默认值
在 BAR Editor 中更改提升的属性和用户定义的属性的默认值

除了在选择子流来源时在 BAR Editor 中修改默认值,在主要流父元素下选择了子流节点元素时,还可以在 BAR Editor 中修改子流节点上指定的值:

子流的所有实例的提升的默认属性和用户定义的默认属性均可在 BAR Editor 中设置
子流的所有实例的提升的默认属性和用户定义的默认属性均可在 BAR Editor 中设置

在 BAR Editor 中更新属性值时,该值存储在一个 broker.xml 文件中,该文件的值取代了存储在源流中的值。

用户定义的属性值和提升的属性值的运行时用法需要遵循一组规则。Flow Editor 中设置的一个子流属性的值(参见图 7)将是使用该子流的所有消息流的该属性的默认值,只要没有在其他地方修改它。如图 8 中所示,可通过在 Flow Editor 中选择子流节点来从引用流修改该值。如果该值被父流修改,那么运行时不会使用子流上定义的默认值,而是会使用子流节点上设置的值。

默认属性值和子流节点上设置的属性值都可以使用 BAR Editor 进行修改,这为您带来了不更改子流或引用流的源代码便可更改子流属性值的能力,避免了重新创建 BAR 文件的需要。

如果在 Flow Editor 中的父流上选择子流节点时设置了该值,如图 8 所示,那么修改该值的惟一方式是使用图 10 中所示的方法。通过这种方式设置值后,就无法通过其他方式在其他地方修改该值。如果子流上设置的默认属性值未在来自引用流的子流节点上进行修改(参见图 7),那么在 BAR Editor 中更改值的两种方法都可以修改此值。

表 1 展示了如何修改用户定义的属性值或提升的属性值。3 个消息流(Flow1、Flow2 和 Flow3)中有一个子流节点引用了具有不同属性配置的同一个子流 (Subflow1)。该子流有一个可配置的属性 (property0)。该属性的默认值通过 Flow Editor 中打开的子流本身设置为 1。运行时在部署流时使用的实际值取决于属性的值是否被覆盖以及何处被覆盖。

表 1. 在 Toolkit 和运行时中使用的用户定义的属性和可配置的属性的属性值的示例
属性设置(默认值 = 1Flow1 引用 Subflow1Flow2 引用 Subflow1Flow3 引用 Subflow1
在 Flow Editor 中的父流上选择子流节点时修改默认属性。将子流节点上的值设置为 2。有效的 property0 值:2没有修改。有效的 property0 值是默认值:1没有修改。有效的 property0 值是默认值:1
在 BAR Editor Manage 选项卡上选择子流元素。子流 property0 默认值被修改为:3不会应用 BAR 修改,因为节点修改更为优先。有效的 property0 值:2使用 BAR Editor 修改的值。有效的 property0 值:3使用 BAR Editor 修改的值。有效的 property0 值:3
在 BAR Editor Manage 选项卡上的引用流元素下选择的子流节点元素。没有进行任何修改。使用在 Flow Editor 中的子流节点上指定的值。有效的 property0 值:2没有进行任何修改。使用 BAR Editor 在子流上修改的默认值。有效的 property0 值:3子流节点属性值被设置为 4。有效的 property0 值:4
代理运行时使用的值有效的 property0 值:2有效的 property0 值:3有效的 property0 值:4

示例概述

本文中使用的示例应用程序(以下简称 “应用程序”)展示了如何将消息流设计和部署为源文件,以实现更好的结构和逻辑灵活性。该应用程序基于 Toolkit 中提供的 Address Book 示例。

该应用程序包含 6 个项目。Message Broker 项目 AddressBook 包含两个流并引用了 3 个其他的项目:库 LogMessageData、Java 项目 AddressBookJava 和 Message Set 项目 AddressBookMessageSetBARfiles 项目包含示例中的 BAR 文件。TestClientBarFiles 包含一段文件 TestBroker_default.tst,该文件是一段 MQSC 脚本,可以运行它在代理中创建以下队列:ADDRESSBOOK_FAULT, ADDRESSBOOK_IN, ADDRESSBOOK_OUT.

除了 Address Book 示例之外,该应用程序还包含从 AddressBookProviderFlow.msgflow 调用的 LogTransaction.subflow,使用一个封装在 loggerLib.jar 中的自定义 Java 日志组件将收到的数据记录到文件系统中。自定义 Java 记录器界面要求输入具有 LogMessageData 库中存储的 XML 模式 FileMessageDefinition.xsd 建模的格式:

示例应用程序
示例应用程序

实现消息流

源部署示例中有两个消息流:AddressBookConsumerFlow.msgflowAddressBookProvider.msgflow。图 12 显示了已更新的 AddressBookProviderFlow.msgflow,其中包含自定义的日志子流。子流 LogTransaction.subflow 添加到了该流中,会在发生 saveAddress 操作时运行。下一节将介绍 LogTransaction 子流的工作原理。

地址簿提供程序流
地址簿提供程序流

实现可部署的子流

在保存记录之前,会调用子流 LogTransaction.subflow。这个子流负责执行两个主要操作:它使用一个映射将消息格式从主要流使用的格式更改为自定义记录器界面需要的格式,然后将更改的消息传递到一个 Java Compute 节点,该节点将消息保存到文件系统上的一个文件中:

子流图
子流图

运行应用程序

运行应用程序的第一步是创建包含必要的源文件的 BAR 文件,而不是编译流。在 BAR Editor 中打开 AddressBookConsumer.bar,确保未选中 Compile and in-line resources 选项:

构建选项
构建选项

在编辑器中选择两个消息流:库 (LogMessageData) 和消息集 (messageSet.mset)。单击 Build and Save 将工件添加到 BAR 文件。如果在 BAR 编辑器上选择 Manage 选项卡,那么您可以看见封装到 BAR 文件中的所有工件,如图 15 所示。如果将在没有安装 Toolkit 的机器上创建同一个 BAR 文件,那么您也可看到 MQSIPACKAGEBAR 命令是什么样的:

Manage 选项卡
Manage 选项卡

要部署 AddressBookConsumer.bar 文件,可以将它拖放到 Brokers 视图中的一个执行组上。部署 AddressBookConsumer.bar 后,所有源工件(消息流、子流、ESQL 模块和具有 XML 模式文件的库)都会部署为 Brokers 视图中的执行组的子元素,如图 16 所示。

因为无法将消息集和 Java 项目无法为源文件,所以以下工件的编译版本已部署在 执行组中:AddressBookJava Java 项目的 AddressBookJava.jarAddressBookMessageSet 消息集的 AddressBookMessageSet.xsdzip 和自定义 Java 日志库 loggerLib.jar

Brokers 视图
Brokers 视图

使用测试客户端测试示例

要测试应用程序,在 Test Client Editor 中的 AddressBook 项目中打开 AddressBookConsumerFlow.mbtest 文件(参见图 17)。默认情况下,测试客户端配置为使用一条包含需要保存的地址的消息来调用该流。请确保测试客户端编辑器的 Configuration 选项卡拥有您的代理的正确的部署位置信息。

Address Book Consumer 流测试客户端
Address Book Consumer 流测试客户端

要发送消息,请单击 Send Message。Provider 流收到消息之后,就会将该消息转发到保存来自消息的地址的路径。Flow Order 节点将消息同时路由到 Custom Logger 子流和保存消息的 Compute 节点。

将消息转换为自定义 Java 记录器所需的格式之后,该子流会调用 Java Compute 节点 Custom logger,该节点会在内部从消息中提取需要的数据,并调用封装在 loggerLib.jar 中的自定义 Java 类 LogFileWriter。此类创建了一个自定义日志文件,其中包含来自存储临时文件的默认系统目录 (java.io.tmpdir) 中的消息的数据。在 Message Flow Test Events 一节中将会查看消息在测试客户端中经历的路径。

使用 Source Deploy 和 Toolkit 重新部署工件

要了解 Toolkit Fix Pack 1 中的消息流的更高灵活性,可将自定义的 Java 记录器替换为开箱即用的 Trace 节点。打开 LogTransaction.subflow 文件,删除现有的 Java Compute 节点,并配置一个新的 Trace 节点,如图 18 所示。以下是粘贴到 Pattern 字段中的代码:

Message saved: Name: ${Body.FileDataElement.name}
Contents: ${Body.FileDataElement.contents} 
Time is: ${EXTRACT(HOUR FROM CURRENT_TIMESTAMP)}
:${EXTRACT(MINUTE FROM CURRENT_TIMESTAMP)}
新的 Trace 节点配置
新的 Trace 节点配置

保存子流。要重新部署子流,可在 BARfiles 项目中创建一个新 BAR 文件,并将它命名为 updatedSubflow.bar。在 BAR Editor 树中勾选 LogTransaction.subflow 文件并单击 Build and Save。因为该子流引用了 LogMap.mapToFileData.map,所以这些文件已经添加到了 BAR 文件中,如下所示:

包含更新的子流的 BAR 文件
包含更新的子流的 BAR 文件

updatedSubflow.bar 拖放到执行组上。在更新 LogTransaction.subflow 并部署引用的映射后,会自动重启所有引用流。当再次调用它们时,运行时就会使用新的子流实现。事实上,您可以使用 BAR Editor Manage 选项卡从 BAR 文件中手动删除映射,因为映射没有更改。在任何情况下,Brokers 视图都应该类似于图 16。

但是,当单击 Brokers 视图中的 log.LogTransaction 组件时,Properties 视图会指示该子流已使用新生成的 BAR 文件重新部署:

重新部署的子流
重新部署的子流

如果执行刚才运行的相同测试,您应该会注意到,跟踪数据现在写入到了 Trace 节点中指定的跟踪文件中 (C:\tempLog\trace.log)。您可以采用相同的独立方式部署更新的消息流、子流、ESQL 模块和映射,无需重新部署正在引用或已被引用的组件。

使用 Source Deploy 和 MQSIPACKAGEBAR 重新部署工件

要使用 MQSIPACKAGEBAR 命令进行更改并重新部署一个消息集,比如向存储的地址中添加一个 Country 元素,可以打开 AddressBookMessageSet 中的 AddressBook_InlineSchema1.mxsd。向消息 Address 中添加一个本地元素,并将它命名为 Country。另外,将最小出现次数更改为 0,以避免遇到样例消息缺乏 country 元素的抱怨。然后保存文件。

前面已经讨论过,无法将消息集和 Java 项目部署为源文件,因此必须在将它们添加到 BAR 文件之前预先编译它们。要保存消息集的已编译版本 (.xsdzip),可右键单击 Application Development 导航器中的 AddressBookMessageSet 并单击 Build for mqsipackagebar。此操作将在 AddressBookMessageSet 项目中创建文件 AddressBookMessageSet.xsdzip。如果打算将 AddressBookMessageSet.xsdzip 文件签入到源控制系统中,然后将它签出到没有安装 Toolkit 的机器上,可以使用 MQSIPACKAGEBAR 命令创建一个 BAR 文件来重新部署此消息集。

打开 Broker 命令控制台并键入以下命令:

mqsipackagebar -w "{workspace path}\AddressBookMessageSet" -a 
"{path of directory where you want bar file to be saved}\updatedMSet.bar" -o 
AddressBookMessageSet.xsdzip

此命令在指定的目录中创建了一个新 BAR 文件。编译消息集并将其添加到 BAR 文件中后,您就可以通过将这个新 BAR 文件部署到执行组来重新部署消息集。

结束语

在本文中,我们了解了如何部署用于流、子流、ESQL 模块和映射的源文件,以及如何让 Message Broker 应用程序更灵活且更易于维护。本文展示了如何仅重新部署应用程序的已更新资源,而无需重新编译和重新测试您的主要消息流。文中还展示了如何在没有 Toolkit 的 Broker 服务器上创建 BAR 文件,以及如何使用 Toolkit 特性来部署需要预编译步骤的资源,比如消息集和 Java 项目。在有关用户定义的属性和提升的属性的一节中,介绍了运行时在不同的配置场景中会使用哪些属性值。


下载

描述名字大小
代码样例SourceDeploy.zip30 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=844020
ArticleTitle=通过将应用程序资源部署为源文件来增强 Websphere Message Broker 应用程序的灵活性
publish-date=11012012