可以使用以下两种类型的套接字连接来检索异步输出:可共享持久套接字连接和专用持久套接字连接。使用的套接字连接类型不同,检索异步输出消息的方式也会不同。可以使用下列 interactionVerb 属性值来检索异步输出:SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 和 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT(以及旧的 SYNC_RECEIVE_ASYNCOUTPUT)。
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_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 Connector for Java 忽略。在专用持久套接字连接和可共享持久套接字连接上调用 interactionVerb 属性的方式是不同的。
检索专用持久套接字连接上的异步输出
要检索专用持久套接字上已排队的输出消息,客户机应用程序必须执行落实方式 0 交互,并将 IMSInteractionSpec 的 interactionVerb 属性设置为 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 或 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT。
除了在专用持久套接字连接上执行落实方式 0 交互,并且设置了 IMSInteractionSpec 的适当 interactionVerb 属性之外,客户机应用程序还必须为 IMSConnectionSpec 的 clientID 属性提供一个值。clientID 是必需的,这是因为它确定将从其中检索异步输出的 TPIPE。要从专用持久套接字上的落实方式 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 属性目标。
检索可共享持久套接字连接上的异步输出
对于 reRoute 标志尚未设置为 TRUE 的可共享持久套接字连接,要检索该套接字连接上的交互所产生的未传递的输出消息,在调用了导致使异常输出进行排队的交互的同一个应用程序中,客户机应用程序必须在同一个可共享持久套接字连接上执行 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 或 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT 交互。必须在同一个客户机应用程序中调用这两种交互的原因在于,IMS 资源适配器会为可共享的持久套接字连接自动生成 clientID。生成的这个 clientID 标识了套接字连接以及异步输出排队至的相关联 OTMA TPIPE。当建立了新的连接时,就会生成新的 clientID。在可共享持久套接字连接上,clientID 是由 IMS Connector for Java 生成的,并且对于每个连接都是唯一的。因此,要检索已生成的特定 clientID 的异步输出,必须使用与同一个 clientID 的连接。这就意味着,对于可共享持久套接字连接(它始终具有已生成的唯一 clientID),必须使用同一个连接。保证使用同一个连接的唯一方法是:在同一个客户机应用程序中同时执行这两种交互(原来的交互以及 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT 或 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 交互)。
对于可共享持久套接字连接上的交互,不要指定 IMSConnectionSpec 的 clientID 属性的值。在可共享持久套接字连接上,不允许使用用户指定的 clientID,这是因为 IMS Connector for Java 会自动生成 clientID。