异步输出编程模型

此编程模型允许您检索 IMS™ 已对其进行排队的输出。

应用程序可能需要检索早先时候已进行排队的输出 - 这就是术语“异步输出”的由来。许多情况都可能导致异步输出。例如,来自 commitMode 0 交互的未传递输出、来自程序间切换的输出、从 ISRT 到备用 PCB 的输出以及来自返回多条输出消息的 IMS 应用程序的输出。

为了检索异步输出,Java™ 应用程序将执行 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 或 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT 交互。对于交互的 execute 方法所使用的 IMSInteractionSpec 对象,应用程序为其 interactionVerb 属性提供值,并为其 commitMode 属性提供值 0。

可以使用以下两种类型的套接字连接来检索异步输出:可共享持久套接字连接和专用持久套接字连接。使用的套接字连接类型不同,检索异步输出消息的方式也会不同。可用来检索异步输出的 interactionVerb 属性值如下:SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 和 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT,以及旧的 SYNC_RECEIVE_ASYNCOUTPUT。

注: SYNC_RECEIVE_ASYNCOUTPUT 与 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 在功能上没有差别。但是,对于 V9.1.0.1 和更高版本的 IMS TM 资源适配器,建议您使用新名称 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT。在本文档的其余部分将只使用新名称 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT。

SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 与 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT 之间的差别将确定 IMS Connect 如何检查“IMS OTMA 异步挂起队列”上的输出。对于 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 或 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 交互,如果发出检索请求时“IMS OTMA 异步挂起队列”中没有异步输出,则一旦过了由客户机应用程序指定的执行超时值时,IMS Connect 就会返回执行超时通知。因此,对于 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 交互,建议您使用可能的最短执行超时值 10。

对于 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT 交互,如果在发出检索请求时,“IMS OTMA 异步挂起队列”中没有异步输出,则 IMS Connect 将等待 OTMA 返回消息,并且等待的时间是在该交互的 executionTimeout 属性中指定的时间长度。如果超过该执行超时之后挂起队列中仍然没有异步输出,则 IMS Connect 将返回异常超时错误。对于 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT 交互,应该选择适当的执行超时值,而不应选择最短的可能超时值。

所有这三个 interactionVerb 属性值都要求采用落实方式 0,并且在可共享持久套接字连接和专用持久套接字连接上都可以使用。另外,IMSInteractionSpec 属性 purgeAsycOutput、reRoute 和 reRouteName 不适用于使用这三个 interactionVerb 的交互,它们将被 IMS TM 资源适配器忽略。在专用持久套接字连接和可共享持久套接字连接上调用 interactionVerb 属性的方式是不同的。另外,使用以下两种方法可从可共享持久套接字连接中检索到异步输出:在名称中使用备用客户机标识或 reRouteName

检索专用持久套接字连接上的异步输出

要检索专用持久套接字上已排队的输出消息,客户机应用程序必须执行落实方式 0 交互,并将 IMSInteractionSpec 的 interactionVerb 属性设置为 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 或 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT。

除了在专用持久套接字连接上使用 IMSInteractionSpec 的适当 interactionVerb 属性来执行落实方式 0 交互之外,客户机应用程序还必须为 IMSConnectionSpec 的 clientID 属性提供一个值。由于 clientID 确定将从其中检索异步输出的 TPIPE,因此 clientID 是必需的。要从专用持久套接字上的落实方式 0 交互中检索输出消息,在 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT/NOWAIT 交互上指定的 clientID 必须与为原来的落实方式 0 交互指定的值相匹配。要检索已发送至备用 PCB 的输出消息,在 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT/NOWAIT 交互上指定的 clientID 必须与备用 PCB 的名称相匹配。要检索已被重新路由至 reRouteName 目标的输出消息,必须将 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT/NOWAIT 交互上的 clientID 设置为 reRouteName 属性指示的目标。

检索可共享持久套接字连接上带有备用客户机标识的异步输出

客户机应用程序可使用备用客户机标识从任何 OTMA TPIPE 中检索重新路由或非重新路由的异步输出消息。对于交互的 execute 方法所使用的 IMSInteractionSpec 对象,当使用该对象的 altClientID 属性时,会指定此备用客户机标识。该备用客户机标识将与具有异步输出消息的 OTMA TPIPE 的名称对应。客户机应用程序不能在同一交互中指定 rerouteName 和该备用客户机标识。

要想支持备用客户机标识,客户机应用程序应满足下列所有条件:

检索可共享持久套接字连接上不带有备用客户机标识的异步输出

在不使用备用客户机标识的情况下,客户机应用程序能够从通过可共享持久套接字连接的交互检索非重新路由的异步输出消息,方法是:执行 SYNC_RECEIVE_ASYNCOUTPUT、SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 或 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT。但该客户机应用程序必须是所调用的交互导致异步输出排队的应用程序,且输出必须位于同一可共享持久套接字连接。

下表显示在指定了不同属性值时“检索异步输出消息”(resumeTpipe)交互的行为。
表 1. 指定了 IMSConnectionSpec 属性值时 resumeTpipe 交互的行为
交互 套接字 clientID reRouteName altClientID 注释
resumeTPIPE,未指定 altClientID 可共享 null null null 对异步输出的检索必须在前一交互所用的连接上完成。否则,检索不到该异步输出。如果检索已失败,则将丢失该消息。
resumeTPIPE,未指定 altClientID 可共享 null myRR null 对异步消息的检索必须在前一交互所用的连接上完成。如果检索已失败,则该消息将被重新路由至 myRR。
resumeTPIPE,指定 altClientID 可共享 null 不适用 myTPIPE 从 TPIPE "myTPIPE" reRouteName 和 altClientID 检索异步消息是相互排斥的,不能同时使用。
resumeTPIPE 专用 myCID 不适用 不适用 从 TPIPE "myCID" 检索异步消息
注: 对于可共享持久套接字连接,SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT/NOWAIT 交互的落实方式将被 IMS TM 资源适配器在内部自动设置为 0,而不管该交互的 IMSInteractionSpec 中设置的值如何。此行为与专用持久套接字连接上的 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT/NOWAIT 交互的行为不同。对于专用套接字连接,落实方式必须显式设置为 0。

反馈