MQBEGIN-开始工作单元

MQBEGIN 调用开始一个由队列管理器协调的工作单元,该工作单元可能涉及外部资源管理器。

语法

MQBEGINHconnBeginOptionsCompcodeReason)

参数

Hconn
类型 :MQHCONN-输入

此句柄表示与队列管理器的连接。 先前的 MQCONN 或 MQCONNX 调用返回了 Hconn 的值。

Hconn 必须是非共享连接句柄。 如果指定了共享连接句柄,那么调用将失败,原因码为 MQRC_HCONN_ERROR。 请参阅 MQCNO-Connect 选项 中 MQCNO_HANDLE_SHARE_ * 选项的描述,以获取有关共享和非共享句柄的更多信息。

BeginOptions
类型 :MQBO-输入/输出

这些选项用于控制 MQBEGIN 的操作,如 MQBO-Begin 选项中所述。

如果不需要任何选项,那么以 C 或 S/390 汇编程序编写的程序可以指定空参数地址,而不是指定 MQBO 结构的地址。

CompCode
类型:MQLONG - 输出
完成代码;此完成代码为以下其中一项:
MQCC_OK
成功完成。
MQCC_WARNING
警告(部分完成)。
MQCC_FAILED
调用失败。

原因
类型:MQLONG - 输出
如果 CompCode 为 MQCC_OK:
MQRC_NONE
(0, X'000') 没有要报告的原因。
如果 CompCode 为 MQCC_WARNING:
MQRC_NO_EXTERNAL_参与者
(2121 , X'849 ') 未注册参与的资源管理器。
MQRC_PARTICIPANT_NOT_AVAILABLE
(2122,X'84A')参与资源管理器不可用。
如果 CompCode 是 MQCC_FAILED:
MQRC_API_EXIT_ERROR
(2374, X'946') API 出口失败。
MQRC_BO_ERROR
(2134 , X'856 ') 开始选项结构无效。
MQRC_CALL_IN_PROGRESS
(2219, X'8AB') 在先前调用完成前输入了 MQI 调用。
MQRC_CONNECTION_BROKEN
(2009, X'7D9') 与队列管理器的连接丢失。
MQRC_ENVIRONMENT_ERROR
(2012, X'7DC') 调用在环境中无效。
MQRC_HCONN_ERROR
(2018, X'7E2') 连接句柄无效。
MQRC_OPTIONS_ERROR
(2046,X'7FE') 选项无效或不一致。
MQRC_Q_MGR_STOPPING
(2162, X'872') 队列管理器正在关闭。
MQRC_RESOURCE_PROBLEM
(2102, X'836') 没有足够系统资源可用。
MQRC_STORAGE_NOT_AVAILABLE
(2071, X'817') 没有足够的存储空间可用。
MQRC_UNEXPECTED_ERROR
(2195, X'893') 发生了意外错误。
MQRC_UOW_IN_PROGRESS
(2128 , X'850 ') 工作单元已开始。

有关这些代码的更多信息,请参阅 消息和原因码

使用说明

  1. 使用 MQBEGIN 调用来启动由队列管理器协调的工作单元,该工作单元可能涉及对其他资源管理器拥有的资源的更改。 队列管理器支持三种类型的工作单元:
    • 队列管理器协调的本地工作单元: 一个工作单元,其中队列管理器是唯一参与的资源管理器,因此队列管理器充当工作单元协调程序。
      • 要启动此类型的工作单元,请在工作单元中的第一个 MQPUT , MQPUT1或 MQGET 调用上指定 MQPMO_SYNCPOINT 或 MQGMO_SYNCPOINT 选项。

      • 要落实或回退此类型的工作单元,请使用 MQCMIT 或 MQBACK 调用。
    • 队列管理器协调的全局工作单元: 一个工作单元,其中队列管理器充当 MQ 资源 属于其他资源管理器的资源的工作单元协调程序。 这些资源管理器与队列管理器协作,以确保对工作单元中资源的所有更改都已落实或一起回退。
      • 要启动此类型的工作单元,请使用 MQBEGIN 调用。
      • 要落实或回退此类型的工作单元,请使用 MQCMIT 和 MQBACK 调用。
    • 外部协调的全局工作单元: 一个工作单元,其中队列管理器是参与者,但队列管理器不充当工作单元协调程序。 而是有一个外部工作单元协调程序,队列管理器与该协调程序协作。
      • 要启动此类型的工作单元,请使用外部工作单元协调程序提供的相关调用。

        如果使用 MQBEGIN 调用来尝试启动工作单元,那么调用将失败,原因码为 MQRC_environMENT_ERROR。

      • 要落实或回退此类型的工作单元,请使用外部工作单元协调程序提供的落实和回退调用。

        如果使用 MQCMIT 或 MQBACK 调用来落实或回退工作单元,那么调用将失败,原因码为 MQRC_environMENT_ERROR。

  2. 如果应用程序以工作单元中未落实的更改结束,那么这些更改的处置取决于应用程序是正常结束还是异常结束。 请参阅 MQDISC-断开连接队列管理器 中的用法说明,以获取更多详细信息。
  3. 一个应用程序一次只能参与一个工作单元。 MQBEGIN 调用失败,原因码为 MQRC_UOW_IN_PROGRESS (如果应用程序已存在工作单元) ,而不管它是哪种类型的工作单元。
  4. MQBEGIN 调用在 MQ MQI 客户机环境中无效。 尝试使用该调用失败,原因码为 MQRC_environMENT_ERROR。
  5. 当队列管理器充当全局工作单元的工作单元协调程序时,可以参与工作单元的资源管理器在队列管理器配置文件中定义。
  6. IBM® i上,支持以下三种类型的工作单元:
    • 仅当作业级别不存在落实定义时,才能使用 队列管理器协调的本地工作单元 ,即,不得对作业发出带有 CMTSCOPE(*JOB) 参数的 STRCMTCTL 命令。
    • 不支持 队列管理器协调的全局工作单元
    • 外部协调的全局工作单元 只能在作业级别存在落实定义时使用,即必须已针对作业发出带有 CMTSCOPE(*JOB) 参数的 STRCMTCTL 命令。 如果已执行此操作,那么 IBM i COMMITROLLBACK 操作将应用于 MQ 资源以及属于其他参与资源管理器的资源。

C 调用

MQBEGIN (Hconn, &BeginOptions, &CompCode, &Reason);
按如下所示声明参数:
MQHCONN  Hconn;         /* Connection handle */
MQBO     BeginOptions;  /* Options that control the action of MQBEGIN */
MQLONG   CompCode;      /* Completion code */
MQLONG   Reason;        /* Reason code qualifying CompCode */

COBOL 调用

CALL 'MQBEGIN' USING HCONN, BEGINOPTIONS, COMPCODE, REASON.
按如下所示声明参数:
**   Connection handle
 01  HCONN         PIC S9(9) BINARY.
**   Options that control the action of MQBEGIN
 01  BEGINOPTIONS.
     COPY CMQBOV.
**   Completion code
 01  COMPCODE      PIC S9(9) BINARY.
**   Reason code qualifying COMPCODE
 01  REASON        PIC S9(9) BINARY.

PL/I 调用

call MQBEGIN (Hconn, BeginOptions, CompCode, Reason);
按如下所示声明参数:
dcl Hconn         fixed bin(31);  /* Connection handle */
dcl BeginOptions  like MQBO;      /* Options that control the action of
                                     MQBEGIN */
dcl CompCode      fixed bin(31);  /* Completion code */
dcl Reason        fixed bin(31);  /* Reason code qualifying CompCode */

Visual Basic 调用

MQBEGIN Hconn, BeginOptions, CompCode, Reason
按如下所示声明参数:
Dim Hconn        As Long 'Connection handle'
Dim BeginOptions As MQBO 'Options that control the action of MQBEGIN'
Dim CompCode     As Long 'Completion code'
Dim Reason       As Long 'Reason code qualifying CompCode'