В процессе работы приложения может потребоваться извлечение выходных данных, которые были поставлены в очередь в определенный момент времени в прошлом; отсюда и термин - асинхронный вывод. Асинхронный вывод может быть результатом целого ряда ситуаций. Например, это могут быть непереданные выходные данные от взаимодействий 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_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 в том же соединении с общим постоянным сокетом в том же приложении, которым было инициировано взаимодействие, приведшее к постановке асинхронного вывода в очередь.
Взаимодействие | Сокет | clientID | reRouteName | altClientID | Замечания |
---|---|---|---|---|---|
resumeTPIPE, без указания altClientID | Общий | пусто | пусто | пусто | Извлечение асинхронного вывода необходимо выполнять в том же соединении, что и предыдущее взаимодействие. Иначе извлечение асинхронного вывода будет невозможно. Если извлечение данных не было выполнено, сообщение будет утрачено. |
resumeTPIPE, без указания altClientID | Общий | пусто | myRR | пусто | Извлечение асинхронных сообщений необходимо выполнять в том же соединении, что и предыдущее взаимодействие. Если извлечение данных не было выполнено, сообщение будет перенаправлено в myRR. |
resumeTPIPE, с указанием altClientID | Общий | пусто | нд | myTPIPE | Извлечение асинхронных сообщений из TPIPE "myTPIPE" reRouteName и altClientID является взаимоисключающим и не может использоваться одновременно. |
resumeTPIPE | Выделенный | myCID | нд | нд | Извлечение асинхронных сообщений из TPIPE "myCID" |