为了在 IMS 中运行事务,Java™ 应用程序将执行 SYNC_SEND_RECEIVE 交互。对于交互的 execute 方法所使用的 IMSInteractionSpec 对象,应用程序为其 interactionVerb 属性提供的值是 SYNC_SEND_RECEIVE,为其 commitMode 属性指定的值是 0 或 1。但是,对于可共享持久套接字连接和专用持久套接字连接,SYNC_SEND_RECEIVE 交互处理是不同的。
IMS TM 资源适配器与应用程序服务器一起从连接池中获得可用连接,或者创建新的连接。作为对新连接进行初始化的一部分,IMS TM 资源适配器将为该连接生成 clientID。生成的 clientID 将标识套接字连接;对于落实方式 0 交互,它将标识 TPIPE 和相关联的“OTMA 异步挂起队列”。
IMS 资源适配器确保套接字与连接相关联,并使用该套接字将带有输入数据的请求发送至 IMS Connect。然后,IMS Connect 将消息发送至 IMS,IMS 将运行事务并返回输出消息。
对于落实方式 0 交互,在接收输出消息时,IMS TM 资源适配器会在内部将 ACK 消息发送至 IMS。该消息将通知 IMS 废弃来自 IMS 队列的输出。当客户机应用程序关闭连接或者终止时,连接就会返回到连接池中,以供其他的落实方式 0 或落实方式 1 交互复用。
要从重新路由目标中检索未传递的输出,另一个客户机应用程序可以在专用持久套接字连接上发出 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 或 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT 交互。该客户机应用程序将提供该重新路由目标作为交互的 clientID。
或者,要从重新路由目标中检索未传递的输出,另一个客户机应用程序可以在可共享持久套接字连接上通过指定备用 clientID 来发出 SYNC_RECEIVE_ASYNCOUTPUT、SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 或 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT 交互。通过使用该备用 clientID,该客户机应用程序可以从任何 TPIPE 中检索未传递的异步输出消息。
当客户机应用程序关闭连接或者终止时,连接就会返回到连接池中,因此,其他的落实方式 0 交互或落实方式 1 交互就可以对其进行复用。
在正常情况下,当客户机应用程序执行落实方式 0 SYNC_SEND_RECEIVE 交互时,应用程序服务器将返回带有用户指定的 clientID 的现有连接,或者创建带有用户指定的 clientID 的新连接。用户指定的 clientID 标识了套接字连接和 TPIPE 以及相关联的“OTMA 异步挂起队列”。
IMS TM 资源适配器确保套接字与连接相关联,并使用该套接字将带有输入数据的请求发送至 IMS Connect。然后,IMS Connect 将消息发送至 IMS,IMS 将运行事务并返回输出消息。在接收输出消息时,IMS TM 资源适配器会在内部将 ACK 发送至 IMS,该 ACK 消息将通知 IMS 废弃来自 IMS 队列的输出。当连接被关闭或者应用程序终止时,连接就会返回到连接池中,以供具有用户指定的相同 clientID 并且正在运行落实方式 0 交互的另一个应用程序复用。
所有错误都会导致将资源异常抛出到客户机应用程序中。而且,某些错误还会导致套接字被 IMS Connect 断开连接。对于落实方式 0 交互,这就意味着无法将输出消息传递至客户机应用程序。未传递的输出将被排队至与用户指定的 clientID 相关联的 TPIPE。
purgeAsyncOutput 和 reRoute 这两种属性不适用于专用持久套接字。不能清除或重新路由专用持久套接字上未传递的输出消息。
如果发生了执行超时,套接字仍然将保持打开,并且落实方式 0 交互的输出将排队至与用户指定的 clientID 相关联的 TPIPE,以供将来检索。当连接被关闭或者应用程序终止时,IMSManagedConnection 对象就会返回到连接池中,以供具有用户指定的相同 clientID 并且正在运行落实方式 0 交互的另一个应用程序复用。