MQBEGIN-开始工作单元
MQBEGIN 调用开始一个由队列管理器协调的工作单元,该工作单元可能涉及外部资源管理器。
语法
MQBEGIN(Hconn、BeginOptions、Compcode、Reason)
参数
- 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 ') 工作单元已开始。
有关这些代码的更多信息,请参阅 消息和原因码。
使用说明
- 使用 MQBEGIN 调用来启动由队列管理器协调的工作单元,该工作单元可能涉及对其他资源管理器拥有的资源的更改。 队列管理器支持三种类型的工作单元:
- 队列管理器协调的本地工作单元: 一个工作单元,其中队列管理器是唯一参与的资源管理器,因此队列管理器充当工作单元协调程序。
- 要启动此类型的工作单元,请在工作单元中的第一个 MQPUT , MQPUT1或 MQGET 调用上指定 MQPMO_SYNCPOINT 或 MQGMO_SYNCPOINT 选项。
- 要落实或回退此类型的工作单元,请使用 MQCMIT 或 MQBACK 调用。
- 队列管理器协调的全局工作单元: 一个工作单元,其中队列管理器充当 MQ 资源 和 属于其他资源管理器的资源的工作单元协调程序。 这些资源管理器与队列管理器协作,以确保对工作单元中资源的所有更改都已落实或一起回退。
- 要启动此类型的工作单元,请使用 MQBEGIN 调用。
- 要落实或回退此类型的工作单元,请使用 MQCMIT 和 MQBACK 调用。
- 外部协调的全局工作单元: 一个工作单元,其中队列管理器是参与者,但队列管理器不充当工作单元协调程序。 而是有一个外部工作单元协调程序,队列管理器与该协调程序协作。
- 要启动此类型的工作单元,请使用外部工作单元协调程序提供的相关调用。
如果使用 MQBEGIN 调用来尝试启动工作单元,那么调用将失败,原因码为 MQRC_environMENT_ERROR。
- 要落实或回退此类型的工作单元,请使用外部工作单元协调程序提供的落实和回退调用。
如果使用 MQCMIT 或 MQBACK 调用来落实或回退工作单元,那么调用将失败,原因码为 MQRC_environMENT_ERROR。
- 要启动此类型的工作单元,请使用外部工作单元协调程序提供的相关调用。
- 队列管理器协调的本地工作单元: 一个工作单元,其中队列管理器是唯一参与的资源管理器,因此队列管理器充当工作单元协调程序。
- 如果应用程序以工作单元中未落实的更改结束,那么这些更改的处置取决于应用程序是正常结束还是异常结束。 请参阅 MQDISC-断开连接队列管理器 中的用法说明,以获取更多详细信息。
- 一个应用程序一次只能参与一个工作单元。 MQBEGIN 调用失败,原因码为 MQRC_UOW_IN_PROGRESS (如果应用程序已存在工作单元) ,而不管它是哪种类型的工作单元。
- MQBEGIN 调用在 MQ MQI 客户机环境中无效。 尝试使用该调用失败,原因码为 MQRC_environMENT_ERROR。
- 当队列管理器充当全局工作单元的工作单元协调程序时,可以参与工作单元的资源管理器在队列管理器配置文件中定义。
- 在 IBM® i上,支持以下三种类型的工作单元:
- 仅当作业级别不存在落实定义时,才能使用 队列管理器协调的本地工作单元 ,即,不得对作业发出带有 CMTSCOPE(*JOB) 参数的
STRCMTCTL命令。 - 不支持 队列管理器协调的全局工作单元 。
- 外部协调的全局工作单元 只能在作业级别存在落实定义时使用,即必须已针对作业发出带有 CMTSCOPE(*JOB) 参数的
STRCMTCTL命令。 如果已执行此操作,那么 IBM iCOMMIT和ROLLBACK操作将应用于 MQ 资源以及属于其他参与资源管理器的资源。
- 仅当作业级别不存在落实定义时,才能使用 队列管理器协调的本地工作单元 ,即,不得对作业发出带有 CMTSCOPE(*JOB) 参数的
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'