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