Модель обработки для общих постоянных сокетов

Соединения с общими постоянными сокетами можно использовать для взаимодействий в режиме фиксации 1 и в режиме фиксации 0. Следующий сценарий описывает взаимодействие SYNC_SEND_RECEIVE через общий постоянный сокет в случае обычной обработки, обработки ошибки и тайм-аута соединения.

Сценарий обычной обработки

IMS TM с сервером приложений либо получает доступное соединение из пула соединений, либо создает новое соединение. При инициализации нового соединения IMS TM создает ИД клиента для этого соединения. Созданный ИД клиента определяет соединение с сокетом, а в случае взаимодействия в режиме фиксации 0 - канал tpipe и связанную очередь асинхронной блокировки OTMA.

IMS TM проверяет, связан ли сокет с соединением, и отправляет через этот запрос с данными ввода в IMS Connect. Затем IMS Connect направляет сообщение в IMS, в то время как IMS выполняет транзакцию и возвращает сообщение вывода.

Для взаимодействий в режиме фиксации 0 при получении сообщений вывода IMS TM посылает сообщение ACK в IMS, говорящее о том, что IMS должна удалить сообщения вывода из очереди IMS. Когда приложение клиента закрывает соединение или завершает свою работу, соединение возвращается в пул для использования в других взаимодействиях с режимом фиксации 1 или 0.

Сценарий обработки ошибок

При возникновении любой ошибки приложению клиента передается информация об исключительной ситуации ресурса. Кроме того, при возникновении некоторых ошибок IMS Connect разъединяет соединение с сокетом. В случае взаимодействий в режиме фиксации 0, исключительная ситуация означает, что сообщение вывода не может быть доставлено в приложение-клиент. Однако для взаимодействий с режимом фиксации 0, использующих соединения с общим постоянным сокетом, недоставленные сообщения вывода после исключительной ситуации можно извлечь, если во взаимодействии SYNC_SEND_RECEIVE указано, что недоставленный вывод должен перенаправляться в определенное расположение. Для этого необходимо указать значения следующих дополнительных свойств в объекте IMSInteractionSpec, которые будут передаваться взаимодействию SYNC_SEND_RECEIVE:
  • Свойству purgeAsyncOutput следует присвоить значение false, чтобы недоставленный вывод не был удален.
  • Свойству reRoute должно быть присвоено значение true, а в свойстве RouteName должно быть указано целевое расположение.

Для получения недоставленных сообщений вывода из расположения, в которое они были перенаправлены, приложение клиента запускает взаимодействие SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT или SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT через соединение с выделенным постоянным сокетом. Клиентское приложение предоставляет расположение перенаправления в виде ИД клиента взаимодействия.

Также для получения недоставленных сообщений вывода из расположения, в которое они были перенаправлены, клиентское приложение запускает взаимодействие SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT или SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT через соединение с общим постоянным сокетом, указав альтернативный ИД клиента. С помощью альтернативного ИД клиента клиентское приложение может извлечь недоставленные сообщения асинхронного вывода из любого TPIPE.

По умолчанию свойству purgeAsyncOutput присвоено значение true. Если для свойства purgeAsyncOutput задано значение true, удаляются следующие сообщения:
  • Недоставленные сообщения вывода, помещенные в блок ввода-вывод PCB главным приложением IMS
  • Сообщения вывода, помещенные в PCB ввода-вывода вспомогательными приложениями IMS, вызванными в результате переключения между программами.
Если для свойства purgeAsyncOutput задано значение false, необходимо указать целевое расположение.

Сценарий тайм-аута выполнения

Если возник тайм-аут выполнения, соединение с сокетом остается открытым, но сообщения вывода не доставляются приложению клиента. Однако для взаимодействий с режимом фиксации 0, использующих соединения с общим постоянным сокетом, недоставленные сообщения вывода после тайм-аута выполнения можно извлечь одним из следующих способов:
  • Приложение, которое создало взаимодействие SYNC_SEND_RECEIVE, может создать взаимодействие SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT или SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT.
  • Недоставленное сообщение вывода можно перенаправить в другое расположение, как описано в сценарии обработки ошибок выше.

Когда приложение клиента закрывает соединение или завершает свою работу, соединение возвращается в пул для использования в других взаимодействиях с режимом фиксации 1 или 0.


Комментарии