MQSeries 支持

EGL 支持访问任何目标平台上的 MQSeries® 消息队列。可以按下列任何方式来提供这样的访问:

可以在给定程序中混合使用这两种方法。但是,在大多数情况下,只需单独使用其中一种方法。

不论采用哪种方法,您都可以通过定制选项记录来控制各种运行时条件,这些记录是 EGL 运行时服务在调用时传递给 MQSeries 的全局基本记录。当您声明选项记录作为程序变量时,可以将 EGL 安装的选项记录部件用作 typedef;也可以将已安装的部件复制到您自己的 EGL 文件中,定制该部件,并将定制的部件用作 typedef。

您的方法将确定 EGL 运行时服务如何使选项记录可用于 MQSeries:
有关选项记录以及有关缺省情况下传递给 MQSeries 的值的详细信息,请参阅 MQ 记录的选项记录。有关 MQSeries 本身的详细信息,参阅下列文档:

连接

在第一次连接至队列管理器(称为连接队列管理器)时,应调用以下列表中的语句:
  • 访问消息队列的 EGL addget next 语句
  • 调用 EGL 函数 MQCONN 或 MQCONNX

每次只能访问一个连接队列管理器;但是,可以访问多个受连接队列管理器控制的队列。如果要直接连接至除当前连接队列管理器之外的队列管理器,则必须通过调用 MQDISC 来断开与第一个队列管理器的连接,然后通过调用 addget next、MQCONN 或 MQCONNX 来连接至第二个队列管理器。

也可以访问远程队列管理器(连接队列管理器可与之进行交互的队列管理器)控制之下的队列。仅当将 MQSeries 本身配置为允许两个队列管理器之间的访问时,才有可能进行该访问。

当调用 MQDISC 时或当代码结束时,对连接队列管理器的访问就会终止。

将消息包括在事务中

可以将队列访问语句嵌入在工作单元中,以便在单个处理点提交或回滚对队列所作的所有更改。如果语句在工作单元中,则下列情况成立:
  • 仅当进行提交时,EGL get next 语句(或 EGL MQGET 调用)才会除去消息
  • 仅当进行提交时,才能在工作单元之外看见由 EGL add 语句(或 EGL MQPUT 调用)放置在队列上的消息

当队列访问语句不在工作单元中时,将立即提交对消息队列所作的每项更改。

如果属性 includeMsgInTransaction 对 MQ 记录有效,则与 MQSeries 相关的 EGL addget next 语句将嵌入在工作单元中。生成的代码包含下列选项:
  • 对于 MQGET,包含 MQGMO_SYNCPOINT
  • 对于 MQPUT,包含 MQPMO_SYNCPOINT
如果未对 MQ 记录指定属性 includeMsgInTransaction,则队列访问语句将在工作单元之外运行。生成的代码包含下列选项:
  • 对于 MQGET,包含 MQGMO_NO_SYNCPOINT
  • 对于 MQPUT,包含 MQPMO_NO_SYNCPOINT

当代码结束工作单元时,EGL 将提交或回滚您的程序正在访问的所有可恢复的资源,包括数据库、消息队列和可恢复的文件。不管您是使用系统函数(sysLib.commitsysLib.rollback)还是使用对 MQSeries 的 EGL 调用(MQCMIT 和 MQBACK),都会产生这种结果;在任一种情况下都会调用适当的 EGL 系统函数。

如果 EGL 程序由于 EGL 运行时服务检测到的错误而过早终止,则会进行回滚。

定制

如果要定制与 MQSeries 之间进行的交互而不是依赖 addget next 语句的缺省处理,则您需要查看本节中的信息。

EGL dataTable 部件

提供了一组 EGL dataTable 部件来帮助您与 MQSeries 进行交互。每个部件都允许 EGL 提供的函数在运行时从基于内存的列表中检索值。下一节讨论有关如何部署数据表的详细信息。

使定制成为可能

要使定制成为可能,您必须将各种已安装的 EGL 文件引入到项目中,而不以任何方式更改它们。这些文件如下所示:
records.egl
包含可以用作在程序中使用的选项记录的 typedef 的基本记录部件;还包含由那些记录使用并且使您能够灵活开发自己的记录部件的结构部件
functions.egl
包含两组函数:
  • MQSeries 命令函数,它们直接访问 MQSeries
  • 初始化函数,它们允许您在程序中使用的选项记录中设置初始值
mqrcode.egl、mqrc.egl 和 mqvalue.egl
包含一组由命令和初始化函数使用的 EGL dataTable 部件

您的任务如下所示:

  1. 通过使用将文件导入工作台的过程,将这些文件置于 EGL 项目中。这些文件位于以下目录中:
    installationDir\egl\eclipse\plugins\
    com.ibm.etools.egl.generators_version\MqReusableParts
    installationDir
    产品安装目录,如 C:\Program Files\IBM\RSPD\6.0。如果在安装您正在使用的产品之前安装了 Rational® Developer 产品并将它保留下来,则可能需要指定在之前安装中使用的目录。
    version
    插件的最新版本;例如,6.0.0
  2. 为了使程序可以更方便地使用这些部件,请在包含程序的文件中编写一个或多个 EGL import 语句。如果要导入的文件位于除正在开发代码的项目之外的项目中,则应确保您的项目引用那个项目。

    有关详细信息,请参阅导入

  3. 在您的程序中,声明全局变量:
    • 声明 MQRC、MQRCODE 和 MQVALUE,每个这样的变量都必须将与该变量同名的 dataTable 部件用作 typedef。
    • 对于要传递给 MQSeries 的每个选项记录,声明将选项记录部件用作 typedef 的基本记录。有关每个部件的详细信息,请参阅 MQ 记录的选项记录
  4. 在函数中,初始化要传递给 MQSeries 的选项记录。可以通过为给定选项记录调用导入的 EGL 初始化函数来方便地完成此任务。每个函数的名称就是用作记录 typedef 的部件的名称再后跟 _INIT。一个示例是 MQGMO_INIT。
  5. 设置选项记录中的值。在许多情况下,可以通过指定表示常量的 EGL 符号来设置值,每个这样的值都基于 MQSeries 文档中描述的符号。可以通过对各个 EGL 符号进行求和来指定多个 EGL 符号,如以下示例所示:
      MQGMO.GETOPTIONS = MQGMO_LOCK
                         + MQGMO_ACCEPT_TRUNCATED_MSG
                         + MQGMO_BROWSE_FIRST
  6. 第一次生成使用 MQSeries 支持的定制功能的特定程序时,还将生成由该程序使用的数据表。要生成在程序中使用的所有数据表,允许构建描述符选项 genTables 缺省为 YES。有关其它详细信息,请参阅 DataTable 部件
使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.