可以使用以下两种套接字连接来检索异步输出:可共享持久套接字连接和专用持久套接字连接。使用的套接字连接不同,检索异步输出消息的方式也会不同。可以检索异步输出的 interactionVerb 属性包括:SYNC_RECEIVE_ASYNCOUTPUT、SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 和 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT。
所有这三种 interactionVerb 属性都要求采用落实方式 0,并且在可共享持久套接字连接和专用持久套接字连接上都可以使用它们。但是在可共享持久套接字连接或专用持久套接字连接上调用 interactionVerb 属性的方式是不同的。
注意:SYNC_RECEIVE_ASYNCOUTPUT 与 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 在功能上没有区别。但是,对于 IMS 资源适配器 9.1.0.1 和将来的发行版,建议您使用 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT。
SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 与 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT 之间的区别在于:IMS Connect 是否等待 IMS OTMA 返回消息。对于 SYNC_RECEIVE_ASYNCOUTPUT 或 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 交互,如果在发出检索请求时,“IMS OTMA 异步挂起队列”中没有异步输出,则 IMS Connect 几乎会立即返回超时通知,这取决于客户机应用程序指定的执行超时值。(建议使用较小的超时值。)对于 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT 交互,如果在发出检索请求时,“IMS OTMA 异步挂起队列”中没有异步输出,则 IMS Connect 将等待 OTMA 返回消息,并且等待的时间是在该交互的 executionTimeout 属性中指定的时间长度。
检索专用持久套接字连接上的异步输出
要检索专用持久套接字上已排队的输出消息,客户机应用程序必须执行落实方式 0 交互,并将 IMSInteractionSpec 的 interactionVerb 属性设置为 SYNC_RECEIVE_ASYNCOUTPUT、SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 或 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT。
除了在专用持久套接字连接上使用 IMSInteractionSpec 的适当 interactionVerb 属性来执行落实方式 0 交互之外,客户机应用程序还必须为 IMSConnectionSpec 的 clientID 属性提供一个值。clientID 是必需的,这是因为它表示要将异步输出排队至的相关联 TPIPE。
要从专用持久套接字上的落实方式 0 交互中检索输出消息,应将 clientID 的值设置为对原始落实方式 0 交互指定的值。要检索备用 PCB 上的输出消息,应将 clientID 的值设置为备用 PCB 的名称。要检索已被重新路由至所定义的目标的输出消息,应将 clientID 的值设置为先前指定的 reRouteName 属性的值。
检索可共享持久套接字连接上的异步输出
要检索可共享的套接字连接上未传递的异步输出消息,客户机应用程序必须在可共享持久套接字上执行落实方式 0 交互,并将 IMSInteractionSpec 的 interactionVerb 属性设置为 SYNC_RECEIVE_ASYNCOUTPUT、SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 或 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT。
要检索可共享持久套接字上的异步输出,必须在同一客户机应用程序中调用 interactionVerb 属性。必须在同一个客户机应用程序中调用 interactionVerb 的原因在于,IMS 资源适配器会为可共享的套接字连接自动生成 clientID。生成的这个 clientID 表示并标识套接字连接以及异步输出排队至的相关联 OTMA TPIPE。当建立了新的连接时,就会生成新的 clientID。在 TPIPE 上排队的消息与生成的 clientID 相关联。要从客户机应用程序执行的交互中检索已排队的异步输出,必须在同一客户机应用程序中调用 interactionVerb,以便使用同一个可共享的套接字连接,并且该套接字连接有正确的、相关联的并且是已生成的 clientID。
对于在可共享持久套接字上发送的任何交互,一定不能指定 IMSConnectionSpec 的 clientID 属性的值。在可共享的套接字连接上不允许用户指定的 clientID,只能使用已生成的 clientID 来检索可共享持久套接字上的异步输出。