SYNC_SEND_RECEIVE 编程模型

要在 IMS™ 中运行事务,Java™ 应用程序将执行 SYNC_SEND_RECEIVE 交互。应用程序为 interactionVerb 属性提供的值为 SYNC_SEND_RECEIVE,为 execute 方法所使用的 IMSInteractionSpec 对象的 commitMode 属性指定的值为 0 或 1。但是,对于可共享持久套接字连接和专用持久套接字连接,SYNC_SEND_RECEIVE 交互处理是不同的。

可共享持久套接字处理模型

下列方案描述了在正常处理、错误处理和执行超时期间可共享持久套接字上的 SYNC_SEND_RECEIVE 交互。这些步骤同时适用于落实方式 1 和落实方式 0。
  • 正常处理方案

    IMS 资源适配器与应用程序服务器一起从连接池中获得可用连接,或者创建新的连接。作为对新连接进行初始化的一部分,IMS 资源适配器将为该连接生成 clientID。生成的 clientID 将标识套接字连接;对于落实方式 0 交互,它将标识 TPIPE 和相关联的“OTMA 异步挂起队列”。

    IMS 资源适配器确保套接字与连接相关联,并使用该套接字来将带有输入数据的请求发送至 IMS Connect。然后,IMS Connect 将消息发送至 IMS,IMS 将运行事务并返回输出消息。

    对于落实方式 0 交互,在接收输出消息时,IMS 资源适配器会在内部将 ACK 消息发送至 IMS,该消息将通知 IMS 废弃来自 IMS 队列的输出。当客户机应用程序关闭连接或者终止时,连接就会返回到连接池中,以供其它的落实方式 0 或落实方式 1 交互复用。

  • 错误处理方案
    所有错误都会导致将资源异常抛出到客户机应用程序中。而且,某些错误还会导致套接字被 IMS Connect 断开连接。对于落实方式 0 交互,发生异常就意味着无法将输出消息传递至客户机应用程序。但是,如果 SYNC_SEND_RECEIVE 交互指定了应该将未传递的输出重新路由至特定目标,则在发生异常之后,可以检索可共享持久套接字连接上落实方式 0 的未传递的输出消息。要将未传递的输出消息重新路由至特定目标,则必须在 SYNC_SEND_RECEIVE 交互上传递的 IMSInteractionSpec 对象中指定下列附加属性:
    • 必须将 purgeAsyncOutput 属性设置为 FALSE,以便不清除未传递的输出
    • 必须将 reRoute 属性设置为 TRUE 并且在 RouteName 属性中指定重新路由目标
    要从重新路由目标中检索未传递的输出,一个单独的客户机应用程序将在专用持久套接字连接上发出 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 或 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT 交互,并且提供重新路由目标作为该交互的 clientID。
    注: purgeAsyncOutput 属性的缺省值为 TRUE。
    当 purgeAsyncOutput 为 TRUE 时,将清除下列输出消息:
    • 被主要的 IMS 应用程序插入到 I/O PCB 中的未传递的输出消息。
    • 被辅助 IMS 应用程序(由程序间切换调用)插入到 I/O PBC 中的输出消息。
    仅当指定了重新路由目标时,才应将 PurgeAsyncOutput 属性的值设置为 FALSE。
  • 执行超时方案
    如果发生了执行超时,套接字连接仍然将打开,但是不会将输出消息传递至客户机应用程序。但是,在发生执行超时异常之后,可以采用下面两种方式来检索可共享持久套接字连接上落实方式 0 交互的未传递的输出消息:
    • 发出了 SYNC_SEND_RECEIVE 交互的同一个客户机应用程序可以发出 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 或 SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT 交互。
    • 正如上面的错误处理方案中所述,可以将未传递的输出消息重新路由至特定目标。

    当客户机应用程序关闭连接或者终止时,连接就会返回到连接池中,因此,其它的落实方式 0 交互或落实方式 1 交互就可以复用它。

专用持久套接字处理模型

专用持久套接字连接只能用于落实方式 0 交互。下列方案描述了在正常处理、错误处理和执行超时期间专用持久套接字上的落实方式 0 SYNC_SEND_RECEIVE 交互。
  • 正常处理方案

    在正常情况下,当客户机应用程序执行落实方式 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 交互的另一个应用程序复用。

相关概念
落实方式处理概述
SYNC_SEND 编程模型
检索异步输出
相关任务
显示输出消息数
使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.