Модель программирования - Асинхронный вывод

Эта модель программирования позволяет извлекать выходные данные, которые были поставлены в очередь системой IMS.

В процессе работы приложения может потребоваться извлечение выходных данных, которые были поставлены в очередь в определенный момент времени в прошлом; отсюда и термин - асинхронный вывод. Асинхронный вывод может быть результатом целого ряда ситуаций. Например, это могут быть непереданные выходные данные от взаимодействий commitMode 0, выходные данные от межпрограммных переключателей, выходные данные от ISRT к альтернативному блоку процессов (PCB), выходные данные приложения IMS, выдающего многочисленные выходные сообщения.

Для получения асинхронного вывода, приложением Java выполняется взаимодействие SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT или SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT. Приложением предоставляется значение для свойства interactionVerb и значение 0 для свойства commitMode объекта IMSInteractionSpec, используемого методом выполнения.

Для получения асинхронного вывода можно использовать два типа соединений с сокетами: постоянный общий сокет и постоянный выделенный сокет. Способ получения исходящих асинхронных сообщений зависит от используемого типа соединения с сокетом. Для получения асинхронного вывода можно использовать следующие значения свойства interactionVerb: SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT и SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT (наряду со старым SYNC_RECEIVE_ASYNCOUTPUT).

Прим.: Функционально значения SYNC_RECEIVE_ASYNCOUTPUT и SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT полностью эквивалентны. Однако при работе с версией 9.1.0.1 и более поздними версиями адаптера ресурсов IMS ТМ рекомендуется использовать новое название SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT. Далее в этом документе будет использоваться только название SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT.

Разница между SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT и SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT заключается в том, как IMS Connect проверяет наличие вывода в очереди асинхронной блокировки IMS OTMA. В случае использования SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT или взаимодействий SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT при отсутствии асинхронного вывода в очереди асинхронной блокировки IMS OTMA на момент получения запроса извлечения, IMS Connect выдает уведомление о тайм-ауте выполнения, как только истекает время, указанное в клиентском приложении как значение тайм-аута выполнения. В связи с этим для взаимодействий SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT рекомендуется установить минимально допустимый размер тайм-аута выполнения, равный 10.

В случае использования взаимодействия SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT, при отсутствии асинхронного вывода в очереди асинхронной блокировки IMS OTMA на момент получения запроса об извлечении, IMS Connect возвращает сообщение по истечении времени, указанного в свойстве executionTimeout взаимодействия OTMA. Если до истечения тайм-аута выполнения в очереди блокировки не появится асинхронный вывод, IMS Connect вернет сообщение об истечении тайм-аута выполнения. Для взаимодействий SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT следует выбрать оптимальное значение тайм-аута, а не минимально допустимое значение.

Для всех трех значений свойства interactionVerb можно использовать соединения общего постоянного сокета или выделенного постоянного сокета, а также необходимо установить режим фиксации 0. При этом свойства IMSInteractionSpec purgeAsycOutput, reRoute и reRouteName не применяются к взаимодействиям, использующим эти три значения свойства interactionVerb, и адаптер ресурсов IMS TM их игнорирует. При использовании соединений с выделенным и общим постоянным сокетом применяются разные способы вызова свойств interactionVerb. Кроме того, асинхронный вывод при использовании соединений с общим постоянным сокетом можно получить двумя способами: через альтернативный ИД клиента или через свойство reRouteName в том же

Получение асинхронного вывода по соединениям с постоянным выделенным сокетом

Для получения сообщений очереди вывода через выделенный постоянный сокет приложение клиента должно запустить взаимодействие в режиме фиксации 0 со свойством interactionVerb объекта IMSInteractionSpec, равным SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT или SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT.

Помимо этого, приложение клиента должно задать свойство clientID объекта IMSInteractionSpec. Это свойство определяет TPIPE, из которого извлекается асинхронный вывода. Для получения вывода в режиме фиксации 0 через выделенный постоянный сокет необходимо, чтобы ИД клиента, указанный для взаимодействия SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT/NOWAIT, совпадал со значением, указанным для исходного взаимодействия в режиме фиксации 0. Для получения сообщений вывода, отправленных на альтернативную PCB, ИД клиента, указанный для взаимодействия SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT/NOWAIT, должен совпадать с именем альтернативного PCB. Для получения сообщений вывода, перенаправленных в reRouteName, ИД клиента, указанный для взаимодействия SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT/NOWAIT, должен совпадать со значением свойства reRouteName.

Извлечение асинхронного вывода с альтернативным ИД клиента при использовании соединений с общим постоянным сокетом

Клиентское приложение может извлекать сообщения асинхронного вывода, перенаправленные либо не перенаправленные с любого OTMA TPIPE посредством альтернативного ИД клиента. Такое альтернативное ИД клиента необходимо указать через свойство altClientID объекта IMSInteractionSpec, используемого методом выполнения. Альтернативное ИД клиента должно соответствовать имени OTMA TPIPE, в котором имеются сообщения асинхронного вывода. В одном и том же взаимодействии клиентского приложения не может быть указано и свойство rerouteName, и альтернативное ИД клиента.

Поддержка альтернативного ИД клиента осуществляется, если клиентским приложением используется всё перечисленное ниже:

Извлечение асинхронного вывода без альтернативного ИД клиента при использовании соединений с общим постоянным сокетом

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

В приведенной ниже таблице показан характер изменения взаимодействия, называемого 'извлечение сообщений асинхронного вывода' (resumeTpipe), в зависимости от различных значений свойств.
Табл. 1. Характер изменения взаимодействий resumeTpipe при различных значениях свойства IMSConnectionSpec
Взаимодействие Сокет clientID reRouteName altClientID Замечания
resumeTPIPE, без указания altClientID Общий пусто пусто пусто Извлечение асинхронного вывода необходимо выполнять в том же соединении, что и предыдущее взаимодействие. Иначе извлечение асинхронного вывода будет невозможно. Если извлечение данных не было выполнено, сообщение будет утрачено.
resumeTPIPE, без указания altClientID Общий пусто myRR пусто Извлечение асинхронных сообщений необходимо выполнять в том же соединении, что и предыдущее взаимодействие. Если извлечение данных не было выполнено, сообщение будет перенаправлено в myRR.
resumeTPIPE, с указанием altClientID Общий пусто нд myTPIPE Извлечение асинхронных сообщений из TPIPE "myTPIPE" reRouteName и altClientID является взаимоисключающим и не может использоваться одновременно.
resumeTPIPE Выделенный myCID нд нд Извлечение асинхронных сообщений из TPIPE "myCID"
Прим.: Для соединений с общим постоянным сокетом, адаптер ресурсов IMS TM автоматически устанавливает значение режима фиксации для взаимодействия SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT/NOWAIT, равное 0, независимо от значения, установленного для данного взаимодействия в IMSInteractionSpec. Такое изменение отличается от характера изменений для взаимодействий SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT/NOWAIT с использованием соединений с выделенным постоянным сокетом. Для соединений с выделенным сокетом, режим фиксации необходимо вручную установить равным 0.

Комментарии